在 Python 中使用相对导入有一个缺点:您将无法再作为独立运行模块,因为您将收到异常:
ValueError:尝试在非包中进行相对导入
Code
# /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
and bar.py
.
我正在寻找适用于 Python 2.6+(包括 3.x)的解决方案。
您可以以一种不同的方式开始“独立运行模块”:
代替:
python foo/bar.py
Use:
python -mfoo.bar
当然,foo/__init__.py
文件必须存在。
另请注意,您之间存在循环依赖关系foo.py
and bar.py
– 这是行不通的。我想这只是你的例子中的一个错误。
看来使用它作为第一行也非常有效foo/bar.py
:
#!/usr/bin/python -mfoo.bar
然后就可以直接执行脚本了POSIX https://en.wikipedia.org/wiki/POSIX系统。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)