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

Python跨目录导入模块触发ModuleNotFoundError的原因及解决方法咨询

报错原因

你在dir_b目录下执行run.py时,Python的当前工作目录为dir_b,你将父目录../添加到sys.path仅能保证解释器可以找到dir_a这个顶层包,无法解决func_g.py内部的导包问题:
func_g.py中写的from func_f import f属于顶层模块导入逻辑,解释器会在sys.path包含的所有路径下搜索名为func_f的模块,但父目录下只有dir_a、dir_b两个文件夹,func_f.py存放在dir_a内部,不属于顶层可直接搜索到的模块,因此触发报错。

解决方案

推荐以下两种规范方案二选一即可:

  • 方案1:修改func_g.py的导包语句为包内相对导入
    把func_g.py第一行改为:
from .func_f import f

当func_g作为dir_a包的子模块被导入时,相对导入语法.会直接锁定同目录下的func_f模块,不受执行目录影响。

  • 方案2:修改func_g.py的导包语句为带包名的绝对导入
    把func_g.py第一行改为:
from dir_a.func_f import f

因为你已经把dir_a所在的父目录加入了sys.path,解释器可以定位到dir_a包下的func_f模块。

不推荐的临时方案:你也可以在run.py的sys.path.append('../')后额外加一行sys.path.append('../dir_a'),这种方式会污染全局模块搜索路径,后续项目复杂度提升后容易出现模块冲突问题。

内容的提问来源于stack exchange,提问作者neco

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 07:54:03