模块导入 python3 而不是 python2
Module imports on python3 not python2
我有一个文件结构如下的项目:
test/
test.py
extra/
stuff.py
__init.py__
test.py 的代码很简单:
import sys
sys.path.append("/path/to/test")
import extra
这愉快地 运行s 使用 python3 test.py
,但不会 运行 在 python 2.7 中,我完全被难住了话题。
python2.7给出的错误是
Traceback (most recent call last):
File "test.py", line 3, in <module>
import extra
ImportError: No module named extra
感谢您的帮助!
这是复制粘贴自:
http://python3porting.com/differences.html
在 Python 2 中,如果您有一个名为 mypackage 的包并且包含一个名为 csv.py 的模块,它会从标准库中隐藏 csv 模块。代码 import csv 将在 mypackage 中导入本地文件,从标准库导入将变得棘手。
在 Python 3 中,这已更改,因此 import csv 将从标准库导入,而要导入本地 csv.py 文件,您需要编写 from . import csv 和 from csv import my_csv 需要更改为 from .csv import my_csv。这些被称为“相对导入”,还有一种语法可以从上面的上一级模块导入;从 .. 导入 csv.
如果您同时支持 Python 2 和 Python 3 而没有 2to3 的 from 。和 from .. 语法从 Python 2.5 开始可用,连同 from future import absolute_import 语句将行为更改为 Python 3行为。
如果您需要支持 Python 2.4 或更早版本,您必须拼出整个包名称,因此 import csv 变为 from mypkg import csv 而 from csv import my_csv 变为 from mypckg.csv 导入 my_csv。为了清晰和可读性,如果可以的话,我会避免相对导入,并且总是拼出整个路径。
2to3 将检查您的导入是否是本地的并进行更改。
简而言之,Python2 允许您逃避相对导入,python3 不能。
我有一个文件结构如下的项目:
test/
test.py
extra/
stuff.py
__init.py__
test.py 的代码很简单:
import sys
sys.path.append("/path/to/test")
import extra
这愉快地 运行s 使用 python3 test.py
,但不会 运行 在 python 2.7 中,我完全被难住了话题。
python2.7给出的错误是
Traceback (most recent call last):
File "test.py", line 3, in <module>
import extra
ImportError: No module named extra
感谢您的帮助!
这是复制粘贴自: http://python3porting.com/differences.html
在 Python 2 中,如果您有一个名为 mypackage 的包并且包含一个名为 csv.py 的模块,它会从标准库中隐藏 csv 模块。代码 import csv 将在 mypackage 中导入本地文件,从标准库导入将变得棘手。
在 Python 3 中,这已更改,因此 import csv 将从标准库导入,而要导入本地 csv.py 文件,您需要编写 from . import csv 和 from csv import my_csv 需要更改为 from .csv import my_csv。这些被称为“相对导入”,还有一种语法可以从上面的上一级模块导入;从 .. 导入 csv.
如果您同时支持 Python 2 和 Python 3 而没有 2to3 的 from 。和 from .. 语法从 Python 2.5 开始可用,连同 from future import absolute_import 语句将行为更改为 Python 3行为。
如果您需要支持 Python 2.4 或更早版本,您必须拼出整个包名称,因此 import csv 变为 from mypkg import csv 而 from csv import my_csv 变为 from mypckg.csv 导入 my_csv。为了清晰和可读性,如果可以的话,我会避免相对导入,并且总是拼出整个路径。
2to3 将检查您的导入是否是本地的并进行更改。
简而言之,Python2 允许您逃避相对导入,python3 不能。