我有一个本地编写的 python 包,其结构如下
package
├── __init__.py
├── __main__.py
├── tests
│ ├── __init__.py
│ └── package_tests.py
└── package
├── __init__.py
├── package.py
当从项目根目录(该树中第一个 package
目录的父目录)在 Python3 virtualenv 中使用 python -m package
运行时,效果非常好
但是,当在 Python2.7 virtualenv 中运行时,当它尝试从 包导入函数时,我在
__main__.py
脚本中收到 ImportError
。 py
__main__.py
:
import sys
from package.package.package import foo, bar
def main(args):
f = foo(args)
bar(f)
if __name__ == "__main__":
main(sys.argv[1:])
错误:
导入错误:没有名为包的模块
我需要更改什么才能使其与两者兼容?
(显然这个包实际上并不叫package)
最佳答案
尽管寻找解释很长时间,但在发布这个问题后我立即找到了解决方案。
查看后the changes to imports between python 2 and 3我发现我只需要使用相对导入。
所以我的 __main__.py
中的导入行变成了
from .package.package import foo, bar
关于python - 在Python2.7中导入错误但在Python3中没有,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57074501/