必须安装ipykernel,否则conda环境无法出现在Jupyter内核列表;因为Jupyter启动时绑定的是自身安装时的Python解释器路径,而非当前shell激活的环境,未注册的环境对Jupyter完全不可见。

ipykernel 是必须装的,否则任何 Conda 或虚拟环境都进不了 Jupyter 的 Kernel 列表。
为什么 conda activate 后直接运行 jupyter notebook 还是用 base 环境?
因为 Jupyter 启动时读的是它自己安装时绑定的 Python 解释器路径,不是当前 shell 激活的环境。即使你 conda activate myenv,只要没把 myenv 注册为内核,Jupyter 就压根不知道这个环境存在。
常见错误现象:import torch 报 ModuleNotFoundError,但你在终端里 conda activate myenv && python -c "import torch" 完全正常——这就是典型的内核未注册问题。
- 根本原因:Jupyter 的 Kernel 列表和 Conda 环境是两个独立系统,需要显式桥接
- 关键动作:必须在目标环境中运行
python -m ipykernel install,而不是在 base 里执行 - 容易踩的坑:用 base 环境的
pip install ipykernel,再试图注册其他环境——无效,ipykernel必须装在目标环境里
python -m ipykernel install 的参数怎么选?
--name 和 --display-name 不一样:--name 是内核在文件系统里的唯一标识(比如用于删除),--display-name 是 Notebook 界面里显示的名字,支持中文和空格。
推荐写法(带 --user):
立即学习“Python免费学习笔记(深入)”;
conda activate myenv python -m ipykernel install --user --name myenv --display-name "My Data Science Env"
-
--user:把内核装到用户目录(~/.local/share/jupyter/kernels/),避免权限问题,也方便多用户隔离 - 不加
--user会尝试写入系统级路径,Windows 上常因权限失败,Linux/macOS 可能触发 sudo 提示 -
--name建议用短名、无空格、小写字母(如py310-tf210),后续删内核或脚本调用更可靠
Kernel 列表里有多个同名项,怎么删掉旧的?
重复执行 python -m ipykernel install 不会覆盖,而是新增一个同名内核(只是路径不同),导致 Notebook 里出现一堆“Python 3.10”、“Python 3.10 (1)”、“Python 3.10 (2)”。
查当前所有内核:
jupyter kernelspec list
删指定内核(比如删掉 old_env):
jupyter kernelspec uninstall old_env
- 删之前确认
old_env对应的路径是否已不存在,否则可能残留损坏内核 - Windows 上注意路径含空格时要用引号包裹:
jupyter kernelspec uninstall "my env" - 删完不用重启 Jupyter,刷新页面或新建 Notebook 就生效
验证是否真切换成功,别只看菜单名
Kernel 菜单里选了“Python 3.10”,不代表代码就在那个环境跑——有可能只是名字对,实际指向错路径。
务必运行这三行验证:
import sys
print(sys.executable)
print(sys.version)
import os; print(os.environ.get("CONDA_DEFAULT_ENV", "not in conda"))
-
sys.executable必须是你目标环境的绝对路径(如/opt/anaconda3/envs/py310/bin/python或C:\Users\Alice\Anaconda3\envs\py310\python.exe) - 如果输出还是 base 路径,说明 Kernel 没真正切换,回头检查
ipykernel install是否在正确环境下执行 -
CONDA_DEFAULT_ENV环境变量能快速判断是否在 Conda 激活态下运行,但注意:某些手动指定解释器的场景(如非 Conda 虚拟环境)这里会是空
conda activate 后再敲命令,别图省事直接双击 Jupyter 图标启动。


















