jupyter notebook不会自动识别新conda环境,必须在目标环境中安装ipykernel并执行python -m ipykernel install --user --name=xxx --display-name="xxx"注册内核,重启后方可切换。

Jupyter Notebook 默认只认 base 环境,想用其他 conda 环境,必须把那个环境“注册”成 Jupyter 可识别的内核(kernel),而不是简单地在终端里 conda activate 之后再开 notebook——那样只会让 notebook 启动时路径变了,但内核还是 base 的。
确认目标环境已存在且 Python 可运行
先别急着装包,确保你要切换的环境本身是干净、可执行的:
- 运行
conda env list查看所有环境,确认目标环境名(比如py39_ml)已列出 - 运行
conda activate py39_ml && python -c "print('ok')",能正常输出说明 Python 解释器可用 - 如果报错
CommandNotFoundError: 'activate',说明没进 Anaconda Prompt 或 Powershell,换回 Anaconda 自带终端再试
在目标环境中安装并注册 ipykernel
这一步是核心:让 Jupyter “看见”这个环境。必须在目标环境下执行,不能在 base 里代劳:
- 先激活:
conda activate py39_ml - 装内核支持包:
conda install ipykernel(推荐用 conda,避免 pip 和 conda 混装冲突) - 注册为内核:
python -m ipykernel install --user --name py39_ml --display-name "Python (py39_ml)" -
--name是内核唯一标识(后续切换时用),--display-name是 notebook 菜单里显示的名字,可含空格和括号
在 notebook 中切换 kernel 失败的常见原因
注册完重启 notebook,Kernel → Change kernel 里还是没出现?大概率卡在这几个点:
- 命令是在
base环境下执行的,不是在目标环境里 —— 注册动作必须在conda activate py39_ml之后做 - 用了
pip install ipykernel但没激活目标环境,导致包装到了 base,注册时实际调用的仍是 base 的 Python - 重复注册同名内核(
--name相同),旧配置残留,可先删掉:jupyter kernelspec remove py39_ml - Windows 下路径含中文或空格,注册时可能静默失败,建议环境名全英文、无空格
不需要 nb_conda 就能完成切换
nb_conda 插件确实能在 Jupyter 主页加个 Conda 标签页,但它不是必需的,反而容易引入兼容性问题(比如和新版 JupyterLab 冲突,或触发 EnvironmentLocationNotFound 错误)。纯靠 ipykernel install 注册是最轻量、最稳定的方式。如果你已经装了 nb_conda 却发现 Conda 标签页打不开,直接卸载它:conda remove nb_conda nb_conda_kernels,不影响内核切换功能。
真正容易被忽略的是:每次新建环境后,都得回到那个环境里跑一遍 python -m ipykernel install——没有“一劳永逸”的全局开关,Jupyter 不会自动扫描 conda 环境列表。











