根本原因是Jupyter kernel与终端Python环境不一致;需先运行import sys; print(sys.executable)比对路径,再用python -m ipykernel install --user --name=xxx注册对应环境内核,并重启内核生效。

Jupyter 和终端用的不是同一个 Python 环境,这是绝大多数情况下的根本原因。 你看到的 ImportError 或 ModuleNotFoundError,几乎都是因为 Jupyter 启动时加载的 kernel 指向了另一个没装你那个包的 Python 解释器。
怎么确认是不是环境不一致?
在终端和 Jupyter Notebook 里都运行这三行代码,对比输出:
import sys print(sys.executable) print(sys.path)
重点关注 sys.executable 的路径 —— 如果两个地方输出的路径完全不同(比如一个是 C:\Users\XXX\anaconda3\python.exe,另一个是 C:\Python39\python.exe),那问题就坐实了。后面所有操作都要围绕“让 Jupyter 用上你终端里那个解释器”来展开。
为什么 ipython kernelspec list 找不到对应 kernel?
这个命令只列出已注册到 Jupyter 的 kernel,不代表系统里没有可用的 Python 环境。常见原因包括:
立即学习“Python免费学习笔记(深入)”;
让 macOS 自动化像说话一样简单 —— 用代码控制你的 Mac,无需学习 AppleScript 系统要求 macOS 14+ (Sonoma) Python 3.9+ 需要开启:辅助功能 + 屏幕录制权限
- 你用的是 conda 环境但没安装
ipykernel,或者没在该环境下运行注册命令 - 你用的是纯 pip + venv,但没手动把环境注册进 Jupyter
- 权限问题导致 kernel.json 写入失败(尤其 Windows 下装在 Program Files 里)
别依赖“有没有列出来”,直接看 sys.executable 更可靠。
如何把当前环境加进 Jupyter kernel 列表?
假设你在终端里能 import 成功,且 sys.executable 指向的是 D:\myenv\python.exe,那就按这个顺序操作:
- 先激活该环境:如果是 conda 环境,运行
conda activate myenv;如果是 venv,运行path\to\myenv\Scripts\activate - 确保已安装
ipykernel:pip install ipykernel(如果提示已存在,跳过) - 执行注册命令:
python -m ipykernel install --user --name myenv --display-name "Python (myenv)" - 重启 Jupyter Notebook,在右上角 Kernel → Change kernel 里选刚注册的名字
注意:--name 是内核标识符(不能含空格),--display-name 是 notebook 界面里显示的名称。注册后,ipython kernelspec list 就能看见它了。
为什么改完 kernel 还是 import 失败?
最容易被忽略的点:Jupyter Notebook 页面右上角显示的 kernel 名称,和你实际运行代码时用的 kernel 可能不一致。每次切换 kernel 后,必须点击菜单 Kernel → Restart & Run All,否则旧 kernel 还在内存里继续跑。
另外,有些包(比如 CRFPP、mindspore)依赖 C++ 编译产物或特定 DLL,即使 kernel 路径对了,也可能因 PATH 缺失或 Visual C++ 运行库未安装而 import 失败 —— 这时候报错会更底层,比如 ImportError: DLL load failed,需要单独处理。

















