Python2.7 中的导入错误,但 Python3 中没有
Import Error in Python2.7 but not in Python3
我有一个 python 在本地编写的包,其结构类似于
package
├── __init__.py
├── __main__.py
├── tests
│ ├── __init__.py
│ └── package_tests.py
└── package
├── __init__.py
├── package.py
当 运行 在来自项目根目录的 Python3 virtualenv 中使用 python -m package
时效果很好(该树中第一个 package
目录的父目录)
然而,当 运行 在 Python2.7 virtualenv 中时,我在 __main__.py
脚本中得到一个 ImportError
,因为它试图从 [=18 导入函数=]
__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 在本地编写的包,其结构类似于
package
├── __init__.py
├── __main__.py
├── tests
│ ├── __init__.py
│ └── package_tests.py
└── package
├── __init__.py
├── package.py
当 运行 在来自项目根目录的 Python3 virtualenv 中使用 python -m package
时效果很好(该树中第一个 package
目录的父目录)
然而,当 运行 在 Python2.7 virtualenv 中时,我在 __main__.py
脚本中得到一个 ImportError
,因为它试图从 [=18 导入函数=]
__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