Jupyter Notebook导入自定义模块报ModuleNotFoundError如何解决
Jupyter Notebook无法导入自定义模块排查方案
以下按问题出现概率从高到低排序,逐点排查即可解决:
- 内核环境不匹配:这是90%同类问题的根因。哪怕你看到
sys.path包含当前工作目录、os.listdir()能列到模块文件,只要Jupyter运行的内核不是你存放模块的Python环境,就会导入失败。先在代码单元格执行以下命令确认解释器路径:
import sys print(sys.executable)
如果输出的路径不是你日常开发存放自定义模块所用的Python/虚拟环境路径,点击顶部菜单栏Kernel-Change Kernel切换到对应环境即可。如果找不到对应环境的内核选项,先在目标环境的命令行执行python -m ipykernel install --user --name=你的自定义环境名,重启Jupyter后就能看到对应选项。
- 文件本身不符合导入要求:
- 检查自定义模块文件名是否和Python内置模块、已安装的第三方库重名,比如不要把自己的脚本命名为
numpy.py、os.py,会触发命名冲突导致导入失败。 - Windows系统默认会隐藏已知文件扩展名,很容易出现文件实际名为
mymodule.py.txt、但资源管理器里只显示mymodule.py的情况,os.listdir()如果没配置显示全后缀也会误导判断,一定要在文件管理器里开“显示文件扩展名”选项确认后缀确实是.py。
- 检查自定义模块文件名是否和Python内置模块、已安装的第三方库重名,比如不要把自己的脚本命名为
- 文件权限异常:Linux/macOS环境下,如果自定义模块文件没有配置当前用户的读权限,Jupyter内核进程无法读取文件内容也会导入失败,在对应目录终端执行
chmod +r 你的模块文件名.py给文件加读权限即可。 - 导入缓存未清理:如果之前导入模块失败过,Jupyter会缓存失败状态,后续哪怕修复了问题也不会自动重新扫描模块,直接点
Kernel-Restart Kernel重启内核清空缓存后再重新导入即可。如果需要频繁修改自定义模块代码,可以在笔记本最开头加以下配置开启自动重载,改完代码不用重启内核就能生效:
%load_ext autoreload %autoreload 2
内容的提问来源于stack exchange,提问作者cobra
相关产品推荐
相关产品推荐

