结论是:必须在目标conda环境中安装ipykernel并执行python -m ipykernel install --user --name=xxx --display-name="xxx"注册内核,缺一不可;jupyter只认静态注册的kernel,不随终端激活环境动态切换,验证需检查sys.executable路径是否匹配。

直接说结论:不是“给环境添加内核”,而是**在目标环境中安装 ipykernel,再用它注册一个指向该环境的 kernel**。漏掉任一环节,Jupyter 都找不到、或找到却用不了。
为什么 conda activate 后运行 jupyter notebook 还是用 base 环境?
因为 Jupyter 启动时读的是它自己维护的 kernel 列表(jupyter kernelspec list),和当前终端激活的 conda 环境无关。你看到的 kernel 是静态注册进去的,不是实时绑定的。
- 即使你在
myenv里执行jupyter notebook,只要没为myenv注册 kernel,它默认仍用base的 kernel - 常见错误现象:
import torch报错,但明明在myenv里用conda install pytorch装过了——说明 kernel 指向的不是myenv - 验证方式:在 notebook 里运行
import sys; print(sys.executable),输出路径必须和myenv的 Python 路径一致
python -m ipykernel install 的参数到底怎么填?
--name 和 --display-name 不一样,且不能随便省略:
-
--name是 kernel 的唯一标识符(文件夹名),只允许字母、数字、下划线、短横线;建议直接用环境名,比如myenv -
--display-name是你在 Jupyter 右上角 “Kernel > Change kernel” 里看到的名字,支持空格和中文,比如"PyTorch 2.0 (CUDA 12.1)" -
--user必须加:把 kernel 装到用户目录,避免权限问题;不加可能报PermissionError或装到系统级位置,导致其他用户也能看到 - 错误写法:
python -m ipykernel install --name=myenv --display-name=myenv(等号后面不能有空格) - 正确写法:
python -m ipykernel install --user --name=myenv --display-name="My PyTorch Env"
注册完 kernel 却在 Jupyter 里看不到?检查这三处
不是命令没跑,而是 kernel 没被 Jupyter 正确识别或加载:
- 确认是否在目标环境里执行了安装命令:先
conda activate myenv,再python -m ipykernel install...;如果在base里执行,注册的是base的 kernel - 运行
jupyter kernelspec list,看输出里有没有你的--name;没有就说明注册失败,常见原因是没装ipykernel或网络中断导致部分文件未写入 - 检查 kernel.json 是否指向正确 Python:进入
jupyter kernelspec list显示的路径,打开kernel.json,确认argv[0]的值是myenv下的python.exe(Windows)或python(macOS/Linux),不是base的路径 - 如果路径错了,别手动改
kernel.json—— 删除后重装:jupyter kernelspec remove myenv,再回到myenv重新运行 install 命令
最常被忽略的一点:ipykernel 必须在目标环境里装,且 python -m ipykernel install 也必须在该环境里运行。这两步分开做、跨环境操作,是 80% “明明装了却看不到” 问题的根源。











