You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

跨目录导入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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 12:35:25