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

Python嵌套文件夹导入模块遇ModuleNotFoundError问题求助

解决Python多层子包导入的ModuleNotFoundError问题

问题原因

运行main.py时,Python的sys.path默认包含main.py所在的根目录,而subsubpackage属于subpackage的子目录,不在根目录的直接子层级中,因此submod.py里的from subsubpackage import subsubmod无法找到目标模块。而单独运行submod.py时,Python会自动把submod.py所在的subpackage目录加入sys.path,所以能正常导入subsubpackage。

另外注意:你的main.py里的入口判断存在语法错误,正确写法应为if __name__ == '__main__':(前后是双下划线),否则main()函数不会被执行。

解决方案

方案1:使用相对导入(推荐)

修改submod.py中的导入语句为相对路径,用.表示当前包目录:

from .subsubpackage import subsubmod

这种方式符合Python包的导入规范,能明确表示导入当前包下的子包,结构清晰且可移植性强。

方案2:使用绝对导入

修改submod.py中的导入语句为基于项目根目录的绝对路径:

from subpackage.subsubpackage import subsubmod

运行main.py时,项目根目录已在sys.path中,这种绝对路径能被Python正确解析。

方案3:临时修改sys.path(不推荐)

如果不想调整导入逻辑,可以在submod.py开头添加代码,将当前脚本所在目录加入sys.path:

import sys
from pathlib import Path

# 将submod.py所在目录添加到sys.path
sys.path.append(str(Path(__file__).parent))

from subsubpackage import subsubmod

这种方法虽能临时解决问题,但会破坏包结构的可移植性,当项目目录结构变动时容易出错,不建议在正式项目中使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 07:25:19