Python嵌套导入报错:ModuleNotFoundError问题求助
Python模块导入问题解决
问题原因
你运行gui/gui.py时,Python的当前工作目录是项目根目录。scripts/script1/main.py里的from file1 import...属于顶级导入——Python会直接在sys.path列出的目录(也就是项目根目录)里找file1模块,但file1.py实际在scripts/script1/子目录下,自然找不到,所以报ModuleNotFoundError。
哪怕sys.path包含项目根目录,Python也不会自动递归搜索所有子目录的模块,只会查顶级目录。
解决方案
1. 使用相对导入(推荐规范做法)
在main.py里改成同级模块的相对导入,同时给scripts/script1目录添加一个空的__init__.py文件(让Python把这个目录识别为包):
# main.py 里的导入代码改成: from .file1 import function1 from .file2 import function2
2. 使用绝对导入(无需改目录结构)
直接基于项目根目录写完整的模块路径,利用sys.path包含项目根目录的特性:
# main.py 里的导入代码改成: from scripts.script1.file1 import function1 from scripts.script1.file2 import function2
3. 临时添加子目录到sys.path(适合快速调试)
在main.py的最开头加入代码,把自身所在的scripts/script1目录加入sys.path:
# main.py 开头添加: import sys from pathlib import Path script1_dir = Path(__file__).resolve().parent sys.path.append(str(script1_dir)) # 原导入代码保留不变 from file1 import function1 from file2 import function2
内容的提问来源于stack exchange,提问作者Ohad Lichtenstein
相关产品推荐
相关产品推荐

