Python路径解释: import from a subpackage

标签 python python-2.7 path pythonpath

这个问题详细说明了我无法向自己解释的行为。

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/

相关文章:

python - 如何在 Python 中将混合数据类型列表转换为数据框

python - Pyparsing - 一组中的零个或一个

python - 值错误 : Could not interpret input 'index' when using index with seaborn lineplot

linux - 如何使用变量作为 Unix find 命令的路径参数?

python - 相机校准基本疑点

Python/Selenium - 如何从模态淡入淡出内容中提取文本?

python - protobuf python找不到包含

python - 将 stdout 重定向到具有 unicode 编码的文件,同时在 python 2 中保留 windows eol

Java:表达式的非法开始

c# - 通过 C# 确定文件路径是否有效且存在