Python 2.7 在其搜索路径中找不到模块
Python 2.7 cannot find module in its search path
我想测试Python2.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 找不到它。我很确定导入语句的语法是正确的。
我修改了打印语句并将 'mod2.py' 代码更改为 from . import mod3
。我没有编辑其他东西,它 运行 在 Python 3.8 中没问题找到 'dir3.mod2'
您必须在 dir3 中添加一个名为 init.py 的空文件,以便 python 能够将该目录识别为 Python 包目录.如果你有这些文件
dir3/__init__.py
dir3/mod2.py
dir3/mod3.py
您现在可以将 mod2.py 和 mod3.py 中的代码导入为
import dir3.mod2
import dir3.mod3
或
from dir3 import mod2
from dir3 import mod3
如果删除 init.py 文件,Python 将不再在该目录中查找子模块,因此尝试导入模块将失败。
这里是 a link.
我想测试Python2.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 找不到它。我很确定导入语句的语法是正确的。
我修改了打印语句并将 'mod2.py' 代码更改为 from . import mod3
。我没有编辑其他东西,它 运行 在 Python 3.8 中没问题找到 'dir3.mod2'
您必须在 dir3 中添加一个名为 init.py 的空文件,以便 python 能够将该目录识别为 Python 包目录.如果你有这些文件
dir3/__init__.py
dir3/mod2.py
dir3/mod3.py
您现在可以将 mod2.py 和 mod3.py 中的代码导入为
import dir3.mod2
import dir3.mod3
或
from dir3 import mod2
from dir3 import mod3
如果删除 init.py 文件,Python 将不再在该目录中查找子模块,因此尝试导入模块将失败。
这里是 a link.