Python 2.7 在其搜索路径中找不到模块
Posted
技术标签:
【中文标题】Python 2.7 在其搜索路径中找不到模块【英文标题】:Python 2.7 cannot find module in its search path 【发布时间】:2020-09-10 18:56:53 【问题描述】:我想测试一下 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' 没有问题
【问题讨论】:
【参考方案1】:您必须在 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。
【讨论】:
以上是关于Python 2.7 在其搜索路径中找不到模块的主要内容,如果未能解决你的问题,请参考以下文章
尝试在 Windows 8 上安装 netCDF4 时出现“需要 Python 版本 2.7,在注册表中找不到”错误
google-cloud-sdk 安装在 CentOS /usr/local/bin 中找不到正确的 Python 2.7 版本