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