jupyter notebook不自动识别conda环境,必须手动用ipykernel注册内核:先激活目标环境,再安装ipykernel,最后执行python -m ipykernel install --user --name=xxx --display-name="xxx",注册后需重启jupyter进程。

直接说结论:Jupyter Notebook 本身不“运行在”某个虚拟环境里,它靠 ipykernel 把虚拟环境注册为可选内核(kernel),你得手动切换。没注册就永远用的是默认环境,哪怕你从终端激活了虚拟环境再启动 jupyter notebook,也大概率还是跑在 base 或系统 Python 上。
为什么 conda activate 后启动 jupyter 还是用错环境?
因为 jupyter notebook 启动时读取的是它自己的 kernel 列表,不是当前 shell 的激活状态。即使你在终端执行了 conda activate myenv,只要 myenv 没通过 ipykernel 注册进 Jupyter,Notebook 就根本“看不见”它。
常见错误现象:
- 终端显示
(myenv),但 Notebook 里import sys; print(sys.executable)输出的是/path/to/anaconda3/bin/python(base 路径) -
conda list在myenv里能看到包,但 Notebook 里import pandas报ModuleNotFoundError
必须执行的三步注册流程(缺一不可)
顺序不能乱,每一步都影响下一步是否生效:
- 先用
conda activate myenv进入目标环境(确保后续安装进对的地方) - 在该环境下运行
conda install ipykernel或pip install ipykernel(有些旧环境可能已装,但建议显式确认) - 仍在此环境下执行:
python -m ipykernel install --user --name myenv --display-name "Python (myenv)"
注意:--name 是 kernel 的内部标识名(用于命令行管理),--display-name 是 Notebook 界面里看到的名字。两者可以不同,但推荐一致,避免混淆。
如何验证和切换 kernel
重启 Jupyter Notebook(不是刷新页面,是关掉再启动),打开任意 notebook:
- 菜单栏点
Kernel → Change kernel,就能看到刚注册的Python (myenv) - 运行单元格:
import sys; print(sys.executable),输出路径应包含/envs/myenv/(Linux/macOS)或\envs\myenv\(Windows) - 执行
jupyter kernelspec list可查看所有已注册 kernel 的存储位置和名称
如果名字错了、重复了,或想删掉旧 kernel,用:jupyter kernelspec remove myenv(别加 --user,这个命令本身只操作用户级 kernel)
远程 Slurm 集群上特别要注意的点
在登录节点创建并注册好 kernel 后,真正运行 notebook 的是计算节点 —— 但计算节点不一定有你的 conda 环境路径,尤其当 miniconda3 装在个人 home 目录下时:
- 务必在计算节点上先执行
conda activate base(因为jupyter lab通常依赖 base 里的jupyter命令) - 再运行
jupyter lab --no-browser --port=XXXX --ip=127.0.0.1 - 确保你的 kernel JSON 文件(在
~/.local/share/jupyter/kernels/myenv/)里argv字段指向的是绝对路径,比如"/home/username/miniconda3/envs/myenv/bin/python",而不是相对路径或python命令
最保险的做法:在计算节点上也手动激活一次 myenv,再检查 which python 和 sys.executable 是否一致 —— kernel 本质就是靠这个路径启动解释器的,路径错,一切白搭。











