python3上的模块导入而不是python2

时间:2015-11-19 17:46:09

标签: python python-2.7 import module package

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

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

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

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

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

在Python 3中,这已经改变,因此import csv将从标准库导入,并导入您需要编写的本地csv.py文件。 import csv和csv import my_csv需要从.csv import my_csv更改为。这些被称为“相对导入”,并且还有一种语法可以从上面的一个级别向上导入模块;来自.. import csv。

如果你支持Python 2和Python 3而不支持2to3。从Python 2.5开始提供from语法,以及来自 future import absolute_import语句,该语句将行为更改为Python 3行为。

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

2to3将检查您的导入是否为本地导入并进行更改。

简而言之,Python2允许你逃避相对导入,python3 不会。

相关问题