我有一个本地编写的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/

10-11 22:13
查看更多