必须在已激活的目标conda环境中执行python -m ipykernel install,否则注册的是当前shell环境而非目标环境的内核;需确认which python路径正确,再运行install命令并指定--name和--display-name,注册后重启Jupyter方可显示新内核。

conda 环境下添加新内核:必须在目标环境里执行 python -m ipykernel install
很多人卡在第一步:明明 conda activate 了 my_env,也 pip install ipykernel 成功,但 jupyter kernelspec list 就看不到新内核。根本原因是命令没在目标环境里运行——python -m ipykernel install --user --name=my_env 必须在已激活的 my_env 中执行,否则注册的是当前 shell 所在环境的 Python 解释器,不是你想要的那个。
常见错误现象:
- 执行完命令后
jupyter kernelspec list显示路径指向 base 环境或系统 Python - Notebook 切换内核时选中了新名字,但
import torch仍报ModuleNotFoundError
实操建议:
- 先确认当前终端已激活目标环境:
conda activate my_env→which python应输出.../envs/my_env/bin/python(macOS/Linux)或...envsmy_envpython.exe(Windows) - 再运行:
python -m ipykernel install --user --name=my_env --display-name="Python (my_env)",--display-name决定 Notebook 界面里显示的名字,建议带括号注明环境名 - 不要用
conda install ipykernel替代python -m pip install ipykernel,前者有时会装错版本,尤其在非 base 环境中
查看和删除内核:用 jupyter kernelspec list 和 jupyter kernelspec remove
jupyter kernelspec list 输出的不只是名字,更重要的是每行末尾的绝对路径——那是 kernel.json 文件所在位置。这个文件里硬编码了 Python 解释器路径,一旦环境被 conda remove 删除,对应内核就会失效(启动时报 Kernel died, restarting),但不会自动从列表里消失。
立即学习“Python免费学习笔记(深入)”;
图片提示词生成器?不止如此。 马甲系统 —— 把脑海中的画面,翻译成AI能理解的专业表达。 用得越多,它越懂你:首次需要多问几句确认方向,用久了几乎一说就懂。 用得越多,它越快:缓存机制让后续对话越来越省。 RAG进化:成功案例持续入库,越跑越聪明。 输入「新手指南」查看完整功能介绍
实操建议:
- 运行
jupyter kernelspec list后,检查每个 kernel 的路径是否还存在(比如ls /path/to/kernel或dir C:path okernel) - 失效内核必须手动清理:
jupyter kernelspec remove my_env,否则 Notebook 界面仍会显示灰色不可用选项 - 如果误删了默认内核(如
python3),重装ipykernel并在 base 环境运行一次python -m ipykernel install --user即可恢复
Windows 下路径空格与权限问题:避免 FileNotFoundError 启动失败
Windows 用户常遇到:内核注册成功、jupyter kernelspec list 显示正常,但 Notebook 里选中后卡在 “Kernel starting…”。典型原因是 Python 安装路径含空格(如 C:Program FilesPython39python.exe),而 kernel.json 里未加引号包裹路径,导致 Windows 解析失败。
实操建议:
- 注册前先检查
python -c "import sys; print(sys.executable)"输出路径,若含空格,手动编辑刚生成的 kernel.json(位置见jupyter kernelspec list输出),把"argv"数组里第一个字符串改成带双引号的完整路径,例如:""C:\Program Files\Python39\python.exe"" - 如果提示 Permission denied,说明
--user参数写错了——Windows 下应确保当前用户对%USERPROFILE%AppDataRoamingjupyterkernels有写权限,不要用管理员 cmd 运行 install 命令(会导致 kernel 被装到系统级目录)
内核切换后变量不共享:这不是 bug,是设计使然
切内核后所有变量、函数、导入的模块全部清空,连 import numpy as np 都得重输。这不是 Jupyter 故障,而是每个内核是独立进程,内存完全隔离——这恰恰是环境隔离的价值所在。
容易被忽略的地方:
- 不能靠切换内核来“热更新”包版本:比如在 py38 环境里升级了
torch,必须重启该内核(Kernel → Restart),而不是切到别的内核再切回来 - 跨内核无法直接传数据,想复用计算结果只能靠文件(
np.save/pickle.dump)或共享内存(需额外配置) - Conda 环境名、kernel name、display-name 三者可以不同,但 kernel name 是唯一标识符,删除或重命名时必须用它,别搞混

















