跨目录导入Python类触发ModuleNotFoundError的解决咨询
解决跨包导入时的ModuleNotFoundError问题
问题原因
当从folder2/file3.py导入folder1/file2.py中的c2类时,file2.py里的from file1 import c1采用了顶级模块导入方式。此时Python的模块搜索路径(sys.path)包含project/目录(通过sys.path.append('../')添加),但file1.py是folder1包下的子模块,顶级搜索路径中找不到名为file1的独立模块,因此触发ModuleNotFoundError。
可行解决方案
方案1:使用绝对导入修改file2.py
将file2.py中的导入语句改为基于包名的绝对导入:
from folder1.file1 import c1 class c2: def __init__(self): self.attr = [c1() for _ in range(10)]
这种方式明确指定了c1所在的包路径,无论从哪个位置导入c2,都能准确找到依赖的c1类。
方案2:使用相对导入修改file2.py
如果folder1始终作为一个包使用,可采用相对当前包的导入方式:
from .file1 import c1 class c2: def __init__(self): self.attr = [c1() for _ in range(10)]
.表示当前包目录,这种写法更适合包内部的模块引用,保持代码的封装性。
验证修改效果
修改file2.py后,直接运行folder2/file3.py即可成功导入c2类,不会再出现模块找不到的错误。
内容的提问来源于stack exchange,提问作者andpe
相关产品推荐
相关产品推荐

