我已经在本地编写了一个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
我需要进行哪些更改以使其与两者兼容?
(显然,该包裹实际上并未称为包裹)</ p>
答案 0 :(得分:0)
尽管寻找了这么长时间的解释,但在发布此问题后,我立即找到了解决方案。
查看the changes to imports between python 2 and 3后,我发现只需要使用相对导入即可。
因此,我的__main__.py
中的导入行变为
from .package.package import foo, bar