我有一个具有以下文件结构的项目:
test/
test.py
extra/
stuff.py
__init.py__test.py的代码很简单:
import sys
sys.path.append("/path/to/test")
import extra它使用python3 test.py愉快地运行,但不会在python2.7中运行,而且我阅读了许多关于这个主题的问题后,完全感到困惑。
python 2.7给出的错误是
Traceback (most recent call last):
File "test.py", line 3, in <module>
import extra
ImportError: No module named extra谢谢你的帮助!
发布于 2015-11-19 17:56:13
这是来自: http://python3porting.com/differences.html的复制粘贴
在Python2中,如果您有一个名为mypackage的包,并且包含一个名为csv.py的模块,它会将csv模块隐藏在标准库中。代码导入csv将在mypackage内导入本地文件,从标准库导入将变得棘手。
在Python3中,这种情况已经改变,这样导入csv就可以从标准库导入,并导入您需要编写的本地csv.py文件。需要将导入csv和从csv导入my_csv更改为从.csv导入my_csv。这些被称为“相对导入”,还有一个语法可以从上面的一个高级模块导入;来自..。进口csv。
如果要同时支持Python2和Python3,而不支持2to3,则需要使用from。从..。自Python2.5以来,语法就可用了,还有一个from将来的导入absolute_import语句,它将行为更改为Python3行为。
如果您需要支持Python2.4或更早版本,则必须详细说明整个包名,以便导入csv从mypkg导入csv,从csv导入my_csv从mypckg.csv导入my_csv。为了清晰和可读性,我将避免相对导入,如果您可以,而且总是详细说明整个路径。
2到3将检查您的进口是否是本地的,并更改它们。
简而言之,Python2允许您处理相对导入,而python3不允许。
https://stackoverflow.com/questions/33810861
复制相似问题