Python's os.chdir function isn't working
我有一些非常神秘的行为,脚本无法运行。显然,下面的脚本是微不足道的,什么也不做,但它是在一个真实的脚本中复制行为。这是名为test.py的文件中的代码。
1 2 3
| import os
os.chdir('/home/jacob/twcSite')
import app |
app位于'home/jacob/twcSite'中,该目录与当前目录不同,包含test.py。如果我在命令行键入python test.py,我会得到ImportError: No module named app。但是,如果我只是简单地键入python来启动交互式解释器并复制粘贴完全相同的三个命令,那么它就可以正常工作而不会出现导入错误。
可能是什么导致了这个错误?它是同一版本的python。完全相同的代码行。为什么在这两种情况下我会有不同的行为?只是为了提供更多的细节,如果您在调用os.chdir之前和之后将输出打印到os.getcwd(),它确实声称已经更改到了正确的目录(显然不是这样)。我在运行Ubuntu14.04,python版本2.7.6。
- 我将查看stackoverflow.com/questions/279237/…以导入您自己的自定义python模块。记住要有一个__init__.py 文件来标识模块。
更改目录不会改变您的导入路径,它只会更改打开文件的目录等等。
参见SysPATH
1 2 3
| import sys
sys.path.append('/home/jacob/twcSite')
import app |
- 那么,你能解释一下,当我直接把代码输入解释器时,为什么代码能工作,而当我在文件中作为脚本运行代码时,为什么不能工作?
- 好吧,那就成功了。谢谢!
- 当您在解释器中运行时,它可能实际上正在更改目录,并且由于代码是live,所以它可以工作。但当你运行python example.py的时候,它是从shell启动的,所以它的工作方式不同。不过,这只是个猜测。
- 好吧,这是合理的解释。只是为了让这个更复杂-当我在OSX机器上运行脚本时,它完全以错误的方式运行。直到我尝试在Linux机器上运行它,它才开始给我带来麻烦。但你告诉我的方式在这两种情况下都有效。
- 很好的解决方案,效果很好
更改当前目录不是在python中查找模块的方法。由于该目录不包含在python搜索范围内,因此您可以使用以下代码手动添加它:
1 2 3 4 5
| import os.path, sys
app_dir = os.path.join('home', 'jacob', 'twcSite')
sys.path.insert(0, app_dir)
import app |