Python模块与数据目录存储及导入失败问题求助
解决
import stuff.mod时的ModuleNotFoundError问题 首先咱们得搞清楚问题出在哪:当你在项目根目录启动IPython,执行import stuff.mod时,Python会去sys.path里找模块,而sys.path默认包含当前工作目录(也就是你的项目根目录)。但mod.py里写的from stuff_data import paper是在找根目录下的stuff_data.py,可这个文件实际在stuff子文件夹里,自然就找不到了。
下面给你两种靠谱的解决办法:
一、修改导入语句(推荐,无需调整目录结构)
你的目录结构已经是标准的Python包结构(有__init__.py),只需要修改mod.py里的导入方式就行:
1. 使用绝对导入
把mod.py里的导入语句改成:
from stuff.stuff_data import paper
这样Python会明确从根目录下的stuff包中查找stuff_data模块,完全符合Python的包导入规则。
2. 使用相对导入
也可以用相对路径来引用同包内的模块,把mod.py的导入语句改成:
from .stuff_data import paper
这里的.代表当前模块所在的包(也就是stuff文件夹),适用于同包内的模块引用,结构清晰。
二、替代解决方案(不修改代码的临时办法)
如果暂时不想改代码,可以手动把stuff目录添加到sys.path中,让Python能找到stuff_data.py:
在IPython会话中先执行:
import sys sys.path.append("./stuff")
之后再执行import stuff.mod就可以正常运行了。不过这个方法不推荐长期使用,因为可能会引发命名冲突,也不符合Python包的规范用法。
内容的提问来源于stack exchange,提问作者baxx
相关产品推荐
相关产品推荐

