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

项目设计疑问:在main.py中导入子模块时触发ModuleNotFoundError的原因排查

为什么运行main.py时出现ModuleNotFoundError,直接运行Child.py却正常?

这个问题的核心是Python模块搜索路径(sys.path)在不同运行场景下的差异,以及导入方式的适配问题:

原因分析

  • 当你在package1目录下直接运行Child.py时,Python会把当前工作目录(也就是package1)添加到sys.path里。这时候from Parent import *会在sys.path里找Parent.py,自然能找到同目录下的文件,所以运行正常。
  • 但当你在folder目录下运行main.py时,Python会把folder目录添加到sys.path里。这时候执行from package1 import Child,Python会加载package1/Child.py,而Child.py里的from Parent import *会在sys.path的根目录(也就是folder)里找Parent模块——但Parent.py在package1子目录里,所以找不到,就抛出了ModuleNotFoundError。

解决方案

你有两种靠谱的修改方式:

1. 使用相对导入(推荐)

把Child.py里的导入语句改成:

from .Parent import *

这里的.代表当前包(package1),Python会从当前模块所在的包内部去查找Parent模块,不管你从哪个目录导入package1.Child,都能正确找到依赖。

2. 使用绝对导入

如果你更习惯绝对路径的写法,也可以改成:

from package1.Parent import *

这样Python会从sys.path的根目录(也就是folder)开始,逐层查找package1下的Parent模块,同样能解决问题。

额外注意

如果你之后还需要直接运行Child.py,建议用模块运行模式:

# 在folder目录下执行
python -m package1.Child

这种方式会让Python把package1当作一个包来处理,相对导入也能正常工作,避免直接运行脚本时可能出现的路径问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 08:47:36