【问题标题】:Module imports on python3 not python2python3而不是python2上的模块导入
【发布时间】:2015-11-20 01:56:13
【问题描述】:

我有一个文件结构如下的项目:

test/
    test.py
    extra/
        stuff.py
        __init.py__

test.py 的代码很简单:

import sys
sys.path.append("/path/to/test")
import extra

这很高兴使用python3 test.py 运行,但不会在 python 2.7 中运行,而且阅读了很多关于该主题的问题后,我完全被难住了。

python 2.7给出的错误是

 Traceback (most recent call last):
   File "test.py", line 3, in <module>
    import extra
ImportError: No module named extra

感谢您的帮助!

【问题讨论】:

    标签: python python-2.7 import module package


    【解决方案1】:

    这是来自:的复制粘贴 http://python3porting.com/differences.html

    在 Python 2 中,如果您有一个名为 mypackage 的包,并且其中包含一个名为 csv.py 的模块,则它会将 csv 模块从标准库中隐藏起来。代码导入 csv 会在 mypackage 中导入本地文件,而从标准库导入会变得很棘手。

    在 Python 3 中,这已更改,因此 import csv 将从标准库导入,并导入您需要从 . import csv 和 from csv import my_csv 需要更改为 from .csv import my_csv。这些被称为“相对导入”,还有一种语法可以从上面的上一级模块导入;从 .. 导入 csv。

    如果您在没有 2to3 的情况下同时支持 Python 2 和 Python 3,则 from .和 from .. 语法从 Python 2.5 开始可用,以及将行为更改为 Python 3 行为的 from future import absolute_import 语句。

    如果您需要支持 Python 2.4 或更早版本,您必须拼出整个包名,以便 import csv 变为 from mypkg import csv 并且 from csv import my_csv 变为 from mypckg.csv import my_csv。为了清晰和可读性,如果可以并且总是拼出整个路径,我会避免相对导入。

    2to3 将检查您的导入是否是本地的并更改它们。

    简而言之,Python2 允许您摆脱相对导入,而 python3 不允许。

    【讨论】:

      猜你喜欢
      • 2021-05-04
      • 2013-11-07
      • 1970-01-01
      • 1970-01-01
      • 2017-11-25
      • 2016-01-08
      • 2013-05-18
      • 2016-03-20
      • 1970-01-01
      相关资源
      最近更新 更多