我有一个本地编写的python包,其结构类似于
package
├── __init__.py
├── __main__.py
├── tests
│ ├── __init__.py
│ └── package_tests.py
└── package
├── __init__.py
├── package.py
从项目的根目录(该树中第一个
python -m package
目录的父目录)在Python3 virtualenv中使用package
运行时,此方法非常有用但是,当在Python2.7 virtualenv中运行时,我在
ImportError
脚本中得到一个__main__.py
,因为它试图从package.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:])
错误:
ImportError: No module named 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/