【问题标题】:Import Error in Python2.7 but not in Python3在 Python2.7 中导入错误,但在 Python3 中没有
【发布时间】:2019-07-17 11:09:56
【问题描述】:

我有一个本地编写的 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,因为它试图从 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

我需要进行哪些更改才能使其与两者兼容?

(显然这个包实际上并不叫包)

【问题讨论】:

  • 你试过在两个 python 中打印sys.argv 吗?有什么区别吗?
  • 尝试将内部文件夹包重命名为其他名称,看看它对两者都有效
  • sys.argv 在两个版本中都能正常工作,问题是相对导入@OlvinR​​oght

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


【解决方案1】:

尽管找了这么久的解释,但在发布此问题后我立即找到了解决方案。

查看the changes to imports between python 2 and 3后发现只需要使用相对导入即可。

所以我的__main__.py 中的导入行变成了 from .package.package import foo, bar

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多