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

Python最小示例项目模块导入报ModuleNotFoundError该如何解决?

问题原因

这是Python模块搜索路径的逻辑导致的:

  • 直接运行python utils/foo.py时,Python会自动将foo.py所在的utils/目录加入sys.path(模块搜索路径列表),因此from bar import Bar可以找到同目录下的bar.py,运行正常。
  • 运行python main.py时,Python会将main.py所在的项目根目录加入sys.path,此时sys.path中不存在utils/目录,foo.py中的from bar import Bar属于绝对导入,只会在sys.path登记的路径下搜索bar模块,因此抛出找不到模块的错误。
解决方案

推荐两种符合规范的修复方式:

方案1:使用同包相对导入

修改foo.py中的导入语句为:

from .bar import Bar

这是Python官方推荐的同包内模块导入写法,.代表当前包目录,无论包被外部导入还是作为模块运行,都可以正常定位到同包下的其他模块。

注意:如果需要单独运行foo.py,不要直接用python utils/foo.py执行,改用python -m utils.foo命令,将其作为包模块运行即可正常支持相对导入。

方案2:使用完整路径的绝对导入

修改foo.py中的导入语句为:

from utils.bar import Bar

从顶层包开始写完整导入路径,运行main.py时项目根目录在sys.path中,可以正常定位到utils.bar模块。

规范说明

你原来的写法确实不符合Python包的导入规范:
当你把utils作为一个包对外提供时,包内的模块互相导入不应该直接依赖运行时的sys.path临时配置,要么使用相对导入,要么使用从顶层包开始的完整绝对导入,才能保证包在任意环境下被导入时都能正常工作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 05:18:03