jupyter notebook需手动注册conda虚拟环境内核:先激活环境并安装ipykernel,再用python -m ipykernel install --user --name myenv --display-name "python (myenv)"注册,最后重启vscode或刷新内核列表。

Jupyter Notebook 本身不自动感知你用 conda 或 venv 创建的虚拟环境,必须手动把环境注册为内核,否则 import 会报错——哪怕包明明装好了。
确认目标虚拟环境已激活且能运行 Python
这是最容易跳过的一步,但直接决定后续是否白忙活。没激活就装 ipykernel,装的其实是当前 shell 默认环境(通常是 base),不是你要的那个。
- 用
conda activate myenv或source myenv/bin/activate(Linux/macOS)或myenv\Scripts\activate(Windows)真正进入目标环境 - 执行
which python(macOS/Linux)或where python(Windows),输出路径应指向你的虚拟环境目录,比如/opt/anaconda3/envs/myenv/bin/python - 运行
python -c "import sys; print(sys.executable)",结果必须和上一步一致
在目标环境中安装 ipykernel
ipykernel 是 Jupyter 识别 Python 环境的“翻译器”。它必须装在你要注册的环境里,不能只装在 base 或系统 Python 里。
- 激活环境后,用
conda install ipykernel(推荐,尤其 Windows + 科学计算栈)或pip install ipykernel - 验证:运行
python -m ipykernel --version,有输出即成功;conda list | grep ipykernel或pip list | grep ipykernel也能看到 - 如果卡住或报 SSL 错误,换镜像源:
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
注册内核并检查 kernel.json 路径
注册命令本身很简单,但默认参数容易埋坑——--user 写入的是用户级内核目录,--prefix 才能绑定到环境路径。多数人需要后者,否则换机器或重装 Jupyter 就失效。
- 推荐命令:
python -m ipykernel install --prefix=/path/to/myenv --name=myenv --display-name="Python (myenv)" - 其中
/path/to/myenv必须是python -c "import sys; print(sys.prefix)"的输出值,不能手敲错 - 注册后运行
jupyter kernelspec list,找到你的内核名,进对应目录打开kernel.json - 重点检查
"argv"字段里的 Python 路径,必须和sys.executable完全一致,否则切换内核后import还是失败
重启 Jupyter 并验证 import 是否生效
Jupyter 启动时只读一次内核列表,改完内核必须重启服务,不能只刷新网页。
- 关闭所有
jupyter notebook或jupyter lab进程(包括后台任务) - 重新运行
jupyter notebook,新建 notebook,点右上角 Kernel → Change kernel → 选你的Python (myenv) - 在 cell 里运行
import sys; print(sys.executable)和!pip list | grep your_package,双确认路径和包都对得上 - 如果仍报
ModuleNotFoundError,90% 是kernel.json里路径写错了,或者没重启 Jupyter
最常被忽略的其实是路径一致性:终端激活的环境、sys.executable 返回的路径、kernel.json 里写的路径,三者必须完全相同。差一个字符,Jupyter 就会悄悄回退到 base 环境执行代码。











