python - 如何在 Python 模块中正确使用相对或绝对导入?

标签 python module package python-module python-import

在 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.pyfoo.pybar.py

我正在寻找适用于 python 2.6+(包括 3.x)的解决方案。

最佳答案

您可以以不同的方式开始“将模块作为独立运行”:

代替:

python foo/bar.py

用途:

python -mfoo.bar

当然,foo/__init__.py 文件必须存在。

还请注意,您在 foo.pybar.py 之间存在循环依赖关系——这是行不通的。我想这只是你的例子中的一个错误。

更新:将它用作 foo/bar.py 的第一行似乎也很有效:

#!/usr/bin/python -mfoo.bar

然后就可以直接在POSIX系统中执行脚本了。

关于python - 如何在 Python 模块中正确使用相对或绝对导入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3616952/

相关文章:

java - GWT 找不到自定义类?

python - 使用 Flask 更新 HTML 字段

python - 优化光线追踪的 numpy 数组操作

joomla - joomla模块中的文件上传

java - 我们如何获取父包注释?有人提供示例吗?

jar - 如何找到 jar 中定义的包?

python - 使用 Flask 中的请求连接 Bluemix 上的 Cloudant 是否有任何已知的负面影响?

python - 在 python 中显示 sympy 渲染的 svg 的问题

ruby-on-rails - rails : Returning errors from Module to Rake task?

python - Python 文档中的错误?