Jupyter Notebook 不会自动识别 Conda 环境,必须手动注册内核;conda env list 与 Jupyter 内核列表互不关联,Jupyter 仅读取 kernels/ 目录下的 kernel spec 文件,未安装或未注册 ipykernel 的环境不会显示。

Jupyter Notebook 不会自动识别 Conda 环境,必须手动注册内核;没有“开启自动识别”的开关,所谓“自动发现”只在极少数配置下偶然生效,不可依赖。
为什么 conda env list 里有环境,但 Jupyter 里看不到?
因为 Jupyter 的内核列表和 conda 的环境列表是两套独立系统。Jupyter 只读取 ~/.local/share/jupyter/kernels/(Linux/macOS)或 %USERPROFILE%\AppData\Roaming\jupyter\kernels\(Windows)下的 kernel spec 文件,不扫描 conda env list 输出的路径。即使你用 conda activate myenv 切换了终端环境,Jupyter 启动时仍只加载它启动那一刻已注册的内核。
- 常见错误现象:
Kernel not found、内核列表里只有python3或base、选中后运行报ModuleNotFoundError - 根本原因:目标环境没装
ipykernel,或装了但没执行python -m ipykernel install - 注意:
conda install ipykernel和pip install ipykernel效果不同——某些 Conda 镜像源提供的ipykernel缺少 launcher 脚本,导致内核启动失败;优先用pip install ipykernel
python -m ipykernel install --user 是什么作用?
这条命令把当前 Python 解释器(即你激活的 Conda 环境里的 python)封装成一个 Jupyter 内核,并写入用户级 kernel spec 目录。加 --user 是关键:避免因权限不足写入系统级目录(如 /usr/local/share/jupyter/kernels/),尤其在服务器多用户环境或 Anaconda 由管理员安装时。
-
--name myenv:内核唯一标识符,用于命令行管理(如jupyter kernelspec remove myenv) -
--display-name "Python (myenv)":你在 Jupyter 界面下拉菜单里看到的名字,支持中文和空格,但 VSCode 有时解析异常,建议不用空格 - 不加
--user且无 root 权限 → 报错[Errno 13] Permission denied - 加了
--user但路径含中文或空格 → Jupyter 可能启动内核失败,日志里出现FileNotFoundError或invalid argument
注册完还是看不到新内核?检查这三处
注册命令成功返回 “Installed kernelspec…” 并不代表 Jupyter 已加载它。Jupyter 在启动时一次性扫描 kernel 目录,之后不会自动刷新。
- 运行
jupyter kernelspec list,确认输出里真有你的myenv及其对应路径(路径应指向你家目录下的kernels/myenv/) - 打开 Jupyter Notebook 后,点击右上角内核名称(如
Python 3),下拉菜单是否包含你注册的Python (myenv)?如果没有,说明前端没读到——重启 Jupyter Notebook 进程(不是刷新网页) - 在 VSCode 中,需按
Ctrl+Shift+P→ 输入Jupyter: Refresh Kernel List执行,或直接重启 VSCode;它不会监听 kernel 目录变化
conda activate 之后直接 jupyter notebook 会自动用新环境吗?
不会。即使你在 myenv 中执行 jupyter notebook,启动的仍是该命令所在 shell 的默认内核(通常是 base 或最初安装 Jupyter 的环境),除非你提前在 myenv 里注册过内核并手动选择。
- 误区:以为“在哪个环境里启动 Jupyter,就默认用哪个环境跑代码”——这是错的。Jupyter Server 和 Kernel 是分离的
- 正确做法:先在
myenv里运行python -m ipykernel install --user --name myenv --display-name "Python (myenv)",再任意环境启动jupyter notebook,最后在界面右上角手动选Python (myenv) - 额外注意:VSCode 左下角显示的
Python Interpreter和 Notebook 右上角的Kernel是两个东西——前者管补全和 lint,后者管实际执行,务必分开确认
真正容易被忽略的是 kernel spec 文件里硬编码的 Python 路径。如果之后你重装或迁移了 Conda 环境,python -m ipykernel install 生成的 json 里记录的 argv 仍指向旧路径,此时内核会静默失败。遇到“选中后卡住不动”或“运行单元格没反应”,要查 ~/.local/share/jupyter/kernels/myenv/kernel.json 里的 argv[0] 是否还有效。


















