当我使用 os.chdir() 从脚本获取包目录时,为什么我的命名空间导入不起作用?
例如这里是我的包结构来演示这个问题。
testpk/
testpk/bin
testpk/bin/runit.py
testpk/lib
testpk/lib/libcode.py
testpk/lib/__init__.py
这是我的 lib 代码,它只打印我已导入
print "I've been imported"
runit.py 的内容
#!/usr/bin/python
import sys, os
if __name__ == "__main__":
os.chdir('/home/moorepe/src/testpk')
print "working path = " , os.getcwd()
import lib.libcode
如果我运行 runit,我会收到此错误:
moorepe@halifax$ bin/runit.py
Traceback (most recent call last):
File "bin/runit.py", line 6, in <module>
import lib.libcode
ImportError: No module named lib.libcode
然而,使用 python 命令行测试它可以按预期工作:
cd testpk
python -c "import lib.libcode
I've been imported
这适用于 bin 目录:
cd testpk/bin
python -c "import os; os.chdir('/home/moorepe/src/testpk') ; import lib.libcode"
I've been imported
谁能解释出了什么问题?
所以这不起作用的原因是python使用当前目录作为除了PYTHONPATH之外的路径。
所以这段代码通过添加 sys.path.append(".") 来工作,因为我强制当前工作目录作为路径添加。