我对脚本无法运行有一些非常神秘的行为。显然,下面的脚本是微不足道的,什么都不做,但它在真实的脚本中重现行为。这是名为test.py
的文件中的代码。
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.getcwd()
之前和之后将输出打印到os.chdir
,它确实声称已经更改为正确的目录(尽管显然不是这样)。我正在运行Ubuntu 14.04,Python版本2.7.6。
答案 0 :(得分:11)
更改目录不会改变您的导入路径,它只会更改打开文件的目录等等。
请参阅sys.path
import sys
sys.path.append('/home/jacob/twcSite')
import app
答案 1 :(得分:1)
更改当前目录不是处理在Python中查找模块的方法。由于目录未包含在Python搜索范围中,因此您可以使用以下代码手动添加它:
import os.path, sys
app_dir = os.path.join('home', 'jacob', 'twcSite')
sys.path.insert(0, app_dir)
import app