python - 在Python2.7中导入错误但在Python3中没有

标签 python python-3.x python-import python-2.x

我有一个本地编写的 python 包,其结构如下

package
├── __init__.py
├── __main__.py
├── tests
│   ├── __init__.py
│   └── package_tests.py
└── package
    ├── __init__.py
    ├── package.py

当从项目根目录(该树中第一个 package 目录的父目录)在 Python3 virtualenv 中使用 python -m package 运行时,效果非常好

但是,当在 Python2.7 virtualenv 中运行时,当它尝试从 包导入函数时,我在 __main__.py 脚本中收到 ImportError 。 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:])

错误:

导入错误:没有名为包的模块

我需要更改什么才能使其与两者兼容?

(显然这个包实际上并不叫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/

相关文章:

python - 通过 api 从树莓派 (DHT22) 收集温度在第二次尝试时失败

python - 为什么硬编码这个列表比计算它慢?

Python - 输出分数而不是小数

python-3.x - 替代部分依赖图?

python-3.x - Visual Studio Code : highlighted imports in python

python - 如何用这个简单的包避免 "Attempted relative import with no known parent package"?

python - Django 中的迭代和内存问题

python - 如何将具有相同值的行分组?

python - 导入语句是如何找到那个模块的?

python - 如何在 Python 中的 Google Cloud Function 中运行子进程