命令行执行Jupyter Notebook时提示“No Module Named example”求助
问题背景
我编写了bash脚本用于从命令行执行Jupyter Notebook,但无论优先导入哪个库,都会出现“No Module Named 'example'”错误。脚本内容如下:
#!/bin/bash source /Users/name/Documents/repos/repo_venv/bin/activate cd /Users/name/Documents/repos/project1/project1.1 #this is the directory my notebook is in # Run the Jupyter Notebook file jupyter nbconvert --execute --ExecutePreprocessor.kernel_name=repo_venv --to notebook file1.ipynb deactivate
已完成的排查步骤:
- 使用
jupyter kernelspec list确认ExecutePreprocessor引用的kernel正确; - 在笔记本中执行
import sys; print(sys.executable),返回结果为/Users/name/Documents/repos/repo_venv/bin/python; - 通过repo_venv中的
pip list确认所需库均已安装。
请问还有哪些可能导致未正确引用虚拟环境的原因?
可能的原因及解决办法
Jupyter内核配置文件路径不符
虽然jupyter kernelspec list显示内核名称正确,但内核的实际配置文件可能指向了错误的Python路径。找到内核配置目录(通常是~/.local/share/jupyter/kernels/repo_venv或虚拟环境内部的kernels目录),打开kernel.json文件,检查argv字段中的Python路径是否与你的虚拟环境路径完全一致,排查拼写错误或软链接指向异常的情况。激活虚拟环境后调用的是系统级Jupyter
激活虚拟环境后,执行which jupyter查看输出路径,确认是否为虚拟环境内的/Users/name/Documents/repos/repo_venv/bin/jupyter。如果输出是系统路径下的Jupyter,说明它没有使用虚拟环境的内核配置,解决方案是直接用虚拟环境内Jupyter的绝对路径执行,把脚本中的jupyter替换为完整路径。模块不在Python的搜索路径中
检查example模块所在目录是否在Python的sys.path里。可以在笔记本开头添加以下代码验证:import sys print(sys.path)如果输出中没有模块所在目录,要么在笔记本里手动添加路径(
sys.path.append("模块所在目录路径")),要么调整脚本中的cd路径到模块的父目录。虚拟环境的pip与Python不匹配
部分情况下虚拟环境的pip可能指向系统级pip,导致安装的模块并未进入虚拟环境。执行/Users/name/Documents/repos/repo_venv/bin/pip --version,确认其关联的Python路径为虚拟环境路径。若不匹配,可重新创建虚拟环境或修复pip的软链接。Python模块缓存干扰
Python的__pycache__缓存可能导致无法识别新安装的模块。可以删除虚拟环境内的所有__pycache__文件夹,或者在脚本激活虚拟环境前添加export PYTHONPATH=""清空路径缓存。
内容的提问来源于stack exchange,提问作者J-snow

