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

已存在__init__.py文件仍触发ModuleNotFoundError的原因是什么?

报错根本原因

这是Python绝对导入规则和包模块搜索逻辑共同导致的问题,具体触发逻辑如下:

  • 你当前存放代码的目录因为存在__init__.py,属于合法的Python包,结构如下:
父目录/
└── 你的包目录/
    ├── __init__.py
    ├── p.py
    ├── s.py
    ├── c.py
    └── d.py
  • 运行p.py作为入口脚本时,导入链路触发了包的__init__.py执行,后续s.py是作为包的子模块被导入的,对应全模块名为你的包名.s。此时在s.py中写from d import D属于绝对导入,Python只会到sys.path的所有路径下搜索顶层名为d的模块,不会自动搜索同包下的d.py
  • 此时d.py的全模块名为你的包名.d,不存在顶层d模块,因此触发ModuleNotFoundError

附加潜在问题

你给出的s.py代码中,from d import D写在了class S的定义缩进块内,不符合Python语法规范,即使导入问题修复后也会触发语法错误,需要把导入语句移到文件顶部。

修复方案

两种方案二选一即可:

  • 将s.py里的导入改为相对导入:from .d import D,明确指定导入同包下的d模块
  • 在p.py最顶部添加代码,手动把包目录加入Python搜索路径:
import sys, os
sys.path.append(os.path.dirname(os.path.abspath(__file__)))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 20:15:05