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

Python Notebook导入包内嵌套模块报No module named 'B'如何解决

报错根因

先明确对应目录结构:

Package_P/
├── __init__.py
├── A.py  # 内部导入语句为 import B
└── B.py

Notebook_folder/
└── X.ipynb  # 内部尝试执行 import A

报错由两层不符合Python3导入规则的写法共同导致:

  1. Python导入模块时会严格按照sys.path存储的目录列表做顶层搜索,当前Notebook启动后,sys.path默认仅包含Notebook所在的Notebook_folder目录、Python环境内置依赖目录,既没有识别到Package_P是一个合法包,也无法直接定位到顶层的A模块。
  2. A.py中写的import B属于Python2时代的隐式相对导入语法,Python3已完全移除该逻辑:包内的模块如果要引用同包下的其他模块,必须显式写相对导入或者全路径绝对导入,否则解释器只会去顶层搜索路径下找名为B的独立模块,而B实际属于Package_P的内部模块,不在顶层搜索范围内,直接触发ModuleNotFoundError。
修复方案

按以下两步调整即可解决问题:

  • 第一步:修改A.py内的导入语句,两种合法写法二选一:
    • 显式相对导入(包内引用推荐写法):将import B替换为from . import B,其中.指代当前A.py所属的Package_P包目录,解释器会直接在同包范围内查找B模块
    • 全路径绝对导入:将import B替换为from Package_P import B,该写法要求Package_P本身处于Python的搜索路径中才可生效
  • 第二步:调整Notebook侧的导入逻辑,保证解释器可识别Package_P包,两种常用方案按需选择:
    1. 临时路径配置(适合单次Notebook调试场景):在Notebook最开头添加代码,将Package_P的父目录加入搜索路径,之后按包结构导入A即可:
      import sys
      # 替换为你本地Package_P所在的父目录实际路径
      sys.path.append("/local/path/to/parent/of/Package_P")
      from Package_P import A
      
    2. 规范目录/环境配置(长期使用推荐):要么将X.ipynb移动到和Package_P同级的目录下启动,要么将Package_P以开发模式安装到当前Notebook使用的Python环境中,后续无需额外修改路径,直接按包结构导入即可正常运行。

注意:不要直接将Package_P目录本身加入sys.path,否则会破坏包的层级结构,把A、B识别为顶层模块,后续仍会触发导入异常。

内容的提问来源于stack exchange,提问作者Jean-Élisée Yao

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 11:24:15