我想测试Python 2.X的相对导入模型
目录树:
exercises/
dir1/
dir2/
mod.py
dir3/
mod2.py
mod3.py
mod.py
import sys
print 'in dir1/dir2/mod.py'
path = [name for name in sys.path if 'Frameworks' not in name].
print 'Module search path of mod is:\n' + str(path)
import dir3.mod2
mod2.py
print 'in dir1/dir2/dir3/mod2.py'
import mod3
mod3.py
print 'in dir1/dir2/dir3/mod3.py by relative import'
'mod'将从'dir3'导入'mod2',然后再导入'mod3'。在Python 3.X中,这将失败,因为未提供“ mod3”的路径。在Python 2.X中,解释器先搜索包含“ mod2”的同一目录,然后再搜索从“ mod”的顶层目录开始的其余路径。
这是我收到的错误消息:
MacBook-Pro-9 exercises % python dir1/dir2/mod.py
in dir1/dir2/mod.py
Module search path of mod is:
['Users/arthur/Desktop/learning_python/exercises/dir1/dir2', '/Library/Python/2.7/site-packages']
Traceback (most recent call last):
File "Desktop/learning_python/exercises/dir1/dir2/mod.py", line 8, in <module>
import dir3.mod2
ImportError: No module named dir3.mod2
我知道'dir2'包含'dir3 / mod2',但是由于某些原因,Python无法找到它。我非常确定import语句的语法正确。
我修改了打印语句,并将'mod2.py'代码更改为读取from . import mod3
。我没有编辑任何东西,它在Python 3.8中运行得很好,找到'dir3.mod2'没有问题。
我想测试Python 2.X目录树的相对导入模型:Exercises / dir1 / dir2 / mod.py dir3 / mod2.py mod3.py mod ....
您必须在dir3中添加一个名为init