jupyter notebook 不会自动识别新创建的 conda 环境,必须在目标环境中安装 ipykernel 并执行 python -m ipykernel install --user --name myenv --display-name "python (myenv)" 手动注册内核,且注册后需重启 jupyter 进程才能在 kernel 菜单中显示并切换。

直接说结论:Jupyter Notebook 本身不“切换环境”,它靠的是更换 kernel —— 也就是把 notebook 连接到你已创建的某个 conda 环境对应的 Python 解释器上。没注册过 kernel 的环境,Jupyter 根本看不见。
为什么 kernel 列表里没有我刚创建的 conda 环境
这是最常卡住的地方:你用 conda create -n myenv python=3.9 创建了环境,也 conda activate myenv 进去了,但打开 Jupyter 后 kernel 菜单里还是只有 Python 3(base 环境)。原因很简单——这个环境还没被注册为 Jupyter 可识别的内核。
- conda 环境 ≠ Jupyter kernel,必须显式注册
- 注册操作必须在目标环境中执行(不是 base 环境)
- 注册命令是
python -m ipykernel install --user --name myenv --display-name "Python (myenv)" -
--name是 kernel 的唯一标识符(不能含空格),--display-name是你在 Jupyter 界面里看到的名字 - 注册后需重启 Jupyter Notebook(不是刷新页面,是关掉所有
jupyter notebook进程再重开)
用 nb_conda_kernels 自动发现所有 conda 环境
每次新建环境都手动注册 kernel 很麻烦?可以用 nb_conda_kernels 实现自动识别。但它不是万能的,得清楚它的行为边界:
Anaconda 2024.10-1 官方 Windows x86_64 安装包下载,来自 Anaconda 官方归档目录,适合需要安装旧版 Anaconda Distribution 的用户。
- 安装只需在 base 环境运行
conda install nb_conda_kernels(不用在每个虚拟环境里装) - 它会扫描
conda env list下的所有环境,并为其中已安装ipykernel的环境自动生成 kernel - 如果某个环境没装
ipykernel(比如只用pip install创建的 venv),它不会出现 - 启动 Jupyter 前仍需确保该环境已激活过至少一次(否则 conda 可能未完成初始化)
- Windows 上偶尔遇到权限问题导致 kernel 列表为空,此时退回手动注册更稳
kernel 切换后代码真在目标环境里跑吗
切完 kernel 不代表万事大吉。常见假象是菜单里选了 Python (py39_env),但 import torch 还是报错。这时候要验证实际执行环境:
- 在 notebook 里运行
import sys; print(sys.executable)—— 输出路径必须指向你的目标环境(如C:\Users\XXX\anaconda3\envs\py39_env\python.exe) - 运行
!which python(Linux/macOS)或where python(Windows)确认 shell 命令调用的也是该环境解释器 - 检查包是否真装对了:
!pip list | grep pandas或conda list pandas - 注意:kernel 切换只影响当前 notebook 文件,不影响其他已打开的 notebook,每个文件独立绑定 kernel
真正容易被忽略的点是:conda 环境的 Python 版本和 ipykernel 的兼容性。比如 Python 3.12 环境可能因 ipykernel 尚未适配而无法注册成功,此时得降级 Python 或等新版支持。别只盯着“菜单有没有”,得用 sys.executable 看真实路径。










