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

JupyterLab环境下Python包与模块导入报ModuleNotFoundError问题求助

问题产生原因

该问题由Python模块搜索路径规则和导入写法不匹配导致,具体逻辑如下:

  • post.py中的from pre import xyz属于隐式相对导入,仅当运行环境的工作目录为sub/文件夹时可正常执行:此时Python搜索路径sys.path会自动加入当前工作目录,可直接定位到同目录下的pre.py。
  • 从top_main.ipynb执行导入时,运行环境的工作目录为top/文件夹,sys.path默认包含top/路径、无sub/路径。加载sub.post模块时,post.py中的from pre import xyz会被识别为绝对导入,Python仅会在sys.path包含的路径下搜索pre模块,匹配不到就抛出ModuleNotFoundError。

解决方案

可根据使用场景选择以下任意一种方案:

方案1:修改为显式相对导入(适合包内模块统一调用场景)

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

from .pre import xyz

前缀.表示从当前包所在路径搜索模块,从top_main.ipynb导入时可正常匹配。
注意:该修改后不能直接在sub/sub_main.ipynb中单独导入post模块,因为单独导入时post会被识别为顶层模块,不支持相对导入规则,如有该需求请选择方案2。

方案2:修改为基于顶层包的绝对导入(适配全场景调用)

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

from sub.pre import xyz

该写法只要top/路径在sys.path中就可正常执行,兼容从top_main.ipynb和sub_main.ipynb两个位置调用。如果sub_main.ipynb运行时出现报错,在该notebook开头加入以下代码将top/路径加入搜索路径即可:

import sys
import os
sys.path.append(os.path.abspath('..'))

方案3:临时调整搜索路径(无需修改源代码的临时方案)

如果不想修改post.py的原有代码,可在top_main.ipynb的导入语句前加入以下代码,将sub/路径临时加入搜索路径:

import sys
import os
sys.path.append(os.path.abspath('./sub'))

之后再执行导入操作即可正常运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 07:45:04