这个问题详细说明了我无法向自己解释的行为。
src/package/__init__.py
为空但存在。
src/package/subpackage/__init__.py
:
pink = 'It works'
src/package/test/test.py
:
import package.subpackage as subpackage
# I also tried `import package.subpackage as subpackage
print subpackage.pink
从 src
调用:python package/test/test.py
失败并显示 ImportError: No module named subpackage
。请注意,import package
也不起作用。
注意:(从 src
运行解释器并输入 import 语句效果非常好。
我应该明白我不应该调用包的子文件吗?在我的项目中,它是一个测试文件,所以对我来说把它放在这里听起来合乎逻辑。
为什么当前工作目录不在导入路径中?
非常感谢阅读和回答的人。
最佳答案
因为你的包不在 $PYTHONPATH 中。如果你要调用test.py,你可以将你的test.py文件移动到src/目录,或者将src添加到$PYTHONPATH
PYTHONPATH="/path/to/src:$PYTHONPATH"
export PYTHONPATH
来自文档
When a module named spam is imported, the interpreter first searches for a built-in module with that name. If not found, it then searches for a file named spam.py in a list of directories given by the variable sys.path
>>> import sys
>>> sys.path
输出是这样的
['.', '/usr/bin', ...
这意味着当前目录也在 sys.path 中。如果要导入模块,请确保模块路径在 sys.path 中,方法是将包目录添加到环境变量 PYTHONPATH,或者将当前目录或脚本目录更改为包目录。
关于Python路径解释: import from a subpackage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21352669/