必须手动用ipykernel注册新Python版本或conda环境,否则Jupyter无法识别;切换内核后sys.executable仍指向旧路径,说明内核未真正切换成功,常见原因包括注册未在目标环境执行、未重启Jupyter、跳过确认重启弹窗。

Jupyter Notebook 不会自动识别你新装的 Python 版本或 conda 环境,必须手动用 ipykernel 注册——否则你在终端里能跑 python3.10,Notebook 里还是显示 Python 3.8 (default)。
为什么切换内核后 sys.executable 还指向旧路径?
这不是代码写错了,是内核根本没真正切换成功。常见原因有三个:
- 注册命令没在目标环境里执行:比如你
conda activate py310后忘了运行python -m ipykernel install,而是直接在 base 环境下注册的,结果注册的是 base 的 Python - 注册完没重启 Jupyter:
jupyter kernelspec list能看到新内核,但 Notebook 进程没重载,Kernel 下拉菜单里就是不出现 - 缓存了旧内核状态:点了 Change Kernel 但跳过了“确认重启”弹窗,实际没重启 kernel,变量和解释器路径都还是旧的
验证方式很简单:在 Notebook 单元格里运行 import sys; print(sys.executable),输出路径必须和你目标环境的 python 路径一致(比如 ~/miniconda3/envs/py310/bin/python 或 C:UsersXXXnaconda3envspy310python.exe)。
python -m ipykernel install 参数怎么填才不踩坑?
--name 和 --display-name 容易混淆,但作用完全不同:
立即学习“Python免费学习笔记(深入)”;
-
--name是内核在文件系统里的唯一 ID,只用于命令行管理(比如jupyter kernelspec remove py310),必须纯英文+下划线,不能有空格、括号、中文,例如py310_cuda、tf26_cpu -
--display-name是你在 Notebook 界面 Kernel 菜单里看到的名字,可以加中文、版本号、用途说明,比如"Python 3.10 + PyTorch 2.6"、"TensorFlow 2.12 (GPU)" - 务必加
--user,避免权限错误;不要用--system,除非你明确要给所有用户安装 - 命令必须在目标环境激活状态下运行:
conda activate py310 && python -m ipykernel install --user --name=py310 --display-name="Python 3.10"
切换后 import 失败或找不到包怎么办?
不是 pip 没装,是包装在了错误的环境里。Jupyter 内核只认它自己绑定的那个 Python 解释器下的 site-packages。
- 先确认当前 kernel 是否真的切换成功(看
sys.executable路径) - 如果路径正确但 import 报错,说明这个环境里确实没装对应包:回到终端,
conda activate py310(或source activate py310),再pip install numpy或conda install pandas - 别在 Notebook 里用
!pip install—— 它默认调用的是当前 kernel 的 pip,但如果 kernel 切换失败,就可能装到错的地方 - Windows 用户注意路径分隔符:注册时若用了反斜杠
,可能导致 kernel.json 解析失败,一律用正斜杠/或双反斜杠\
最容易被忽略的一点:注册完内核后,必须关掉所有 Jupyter Notebook 进程(包括后台的 jupyter-notebook 或 jupyter-lab),再重新启动,否则新内核不会出现在菜单里。


















