VS Code 运行 Jupyter Notebook 的核心前提是正确配置 ipykernel:必须在当前选中的 Python 解释器环境中安装、用 --user 参数注册到用户级内核目录,并重启 VS Code 窗口;否则内核选择器为空或显示 “unavailable”,且卡在连接状态。

VS Code 运行 Jupyter Notebook 缺的不是插件,而是 ipykernel —— 它没装、没注册、或没连上当前选中的 Python 解释器,Notebook 就根本启动不了。
为什么右上角内核选择器是空的或只显示 “Python 3 (system)”
VS Code 不会自动扫描你电脑上所有 Python 环境,它只读取你当前选中的那个解释器路径下是否注册了可用内核。常见原因包括:
- 没运行过
python -m ipykernel install --user --name myenv --display-name "Python (myenv)",内核压根没写入~/.local/share/jupyter/kernels/(Linux/macOS)或%USERPROFILE%\AppData\Roaming\jupyter\kernels\(Windows) - 注册命令漏了
--user,导致内核被写到系统级目录(如C:\Program Files\),VS Code 没权限读取 -
--name用了空格或中文(比如--name "my env"),Jupyter 内部解析失败,jupyter kernelspec list里可能看不到条目 - VS Code 没重启:注册完必须关闭并重开整个窗口,仅 “Developer: Reload Window” 不生效
选了内核却一直卡在 “Connecting to kernel…”
这说明内核进程启动了,但和 VS Code 的通信链路断了。本质是 IPC 层(通常是 ZeroMQ 绑定本地端口)失败,不是代码问题。
- 检查 Output → Jupyter 面板,搜
Failed to start the kernel或No module named 'ipykernel'—— 如果有,说明进程根本没起来,回退去确认ipykernel是否真在该环境里 - Windows 用户关掉杀毒软件或企业防火墙:某些安全软件会拦截
tcp://127.0.0.1:XXXXX这类本地连接 - 别用管理员身份启动 VS Code:会导致内核子进程无法访问用户级 socket 文件
- 降级
ipykernel:6.27+ 版本在部分 WSL/Windows 组合下有 socket 绑定 bug,试试pip install "ipykernel
明明选了 conda/virtualenv 内核,import 却报 ModuleNotFoundError
内核名只是个标签,不保证执行环境和你预期一致。VS Code 有两个独立配置层:
- 右上角 Kernel 选择器:决定单元格实际运行时的 Python 环境(含
sys.path、已安装包) - 左下角 Python Interpreter 显示:只影响 .py 文件补全、静态检查、调试器默认行为,对 notebook 执行无直接影响
- 务必在打开 .ipynb 后,**手动点击右上角内核名 → 从下拉列表中选你注册的
Python (myenv)**,不能依赖左下角解释器“带过去” - 验证是否真正生效:在 notebook 里运行
import sys; print(sys.executable),输出路径必须和你注册内核时激活的环境一致
最容易被忽略的一点:注册内核的命令必须在目标环境中执行,且 python 必须指向那个环境里的可执行文件——哪怕你用 conda activate myenv 激活了,也要确认 which python(macOS/Linux)或 where python(Windows)输出的是对应路径。路径错一点,ipykernel 就装到别的地方去了。


















