在 Python 中使用相对导入有一个缺点,您将无法再将模块作为独立模块运行,因为您会遇到异常:ValueError: Attempted relative import in non-package
# /test.py: just a sample file importing foo module
import foo
...
# /foo/foo.py:
from . import bar
...
if __name__ == "__main__":
pass
# /foo/bar.py: a submodule of foo, used by foo.py
from . import foo
...
if __name__ == "__main__":
pass
我应该如何修改示例代码以便能够执行所有:test.py
、foo.py
和 bar.py
我正在寻找适用于 python 2.6+(包括 3.x)的解决方案。
最佳答案
您可以以不同的方式开始“将模块作为独立运行”:
代替:
python foo/bar.py
用途:
python -mfoo.bar
当然,foo/__init__.py
文件必须存在。
还请注意,您在 foo.py
和 bar.py
之间存在循环依赖关系——这是行不通的。我想这只是你的例子中的一个错误。
更新:将它用作 foo/bar.py
的第一行似乎也很有效:
#!/usr/bin/python -mfoo.bar
然后就可以直接在POSIX系统中执行脚本了。
关于python - 如何在 Python 模块中正确使用相对或绝对导入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3616952/