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

直接说结论:Jupyter Notebook 本身不“切换环境”,而是通过注册并选择不同 ipykernel 内核来使用目标虚拟环境。你不能在已打开的 Notebook 里用 conda activate 切换解释器,必须靠内核(kernel)机制。
为什么 conda activate 在 Notebook 里无效?
Jupyter 启动时绑定的是一个 Python 解释器进程(即 kernel),之后所有 cell 都由该进程执行。你在 Notebook 单元格里运行 conda activate myenv 只是起一个 shell 子命令,完全不影响当前 kernel 的 Python 路径或已加载模块。
- 现象:执行
import sys; print(sys.executable)始终显示启动 Jupyter 时的那个路径,不会变 - 本质:conda 环境是进程级隔离,而 Notebook cell 是 kernel 进程内的代码执行,两者不在同一作用域
- 所以:想换环境,必须换 kernel,不是换 conda 激活状态
如何把 conda 环境注册成可用 kernel?
核心就三步,且**每一步都必须在目标 conda 环境激活状态下执行**:
- 激活环境:
conda activate myenv - 安装内核桥接包:
conda install ipykernel(不要用 pip,避免与 conda 包管理冲突) - 注册为 Jupyter kernel:
python -m ipykernel install --user --name myenv --display-name "Python (myenv)"
--name 是 kernel 的唯一标识(建议和环境名一致),--display-name 是你在 Jupyter 界面里看到的名字。注册后无需重启 Jupyter,刷新页面即可在 Kernel → Change kernel 中看到新选项。
常见失败点和对应操作
注册后 kernel 不出现?大概率卡在这几个地方:
- 没激活目标环境就运行
python -m ipykernel install→ 它会把当前环境(通常是 base)注册为myenv名字,导致名字和实际不符 - 用 pip 装了
ipykernel,但 conda 环境里 Python 找不到它 → 优先用conda install ipykernel - 执行
python -m ipykernel install时提示ModuleNotFoundError: No module named 'ipykernel'→ 说明ipykernel没装进当前环境,回到上一步重装 - 注册成功但 Jupyter 仍不显示 → 检查是否加了
--user;如果漏掉,可能写到系统级位置,普通用户不可见
怎么确认当前 notebook 正在用哪个环境?
别信右上角 kernel 名字,它可被手动改写。最可靠方式是运行:
import sys print(sys.executable)
输出路径应指向你的 conda 环境目录,例如 /opt/anaconda3/envs/myenv/bin/python(macOS/Linux)或 C:\Users\XXX\anaconda3\envs\myenv\python.exe(Windows)。如果还是 base 路径,说明 kernel 没切成功,或者注册时填错了 --name。
真正容易被忽略的是:每次新建 notebook 默认用上次 kernel,不是当前激活环境;而且 kernel 切换只对当前 notebook 生效,不会影响其他已打开的 notebook。


















