vscode中jupyter notebook无法执行的核心原因是内核未手动注册:即使选对python解释器,也必须在目标环境运行python -m ipykernel install --user --name myenv --display-name "python (myenv)",否则显示“python 3 (unavailable)”或无内核选项。

VSCode 里写 Jupyter 不是“打开.ipynb 就能跑”,核心卡点永远在内核(kernel)——选对解释器 ≠ 有可用 kernel,必须手动注册 ipykernel,否则单元格灰色、右上角显示 “Python 3 (unavailable)” 或根本没选项。
为什么选了 Python 解释器,.ipynb 还是不可执行?
VSCode 的 Python: Select Interpreter 只告诉编辑器用哪个 python 命令,不等于它能被 Jupyter 扩展调用。Jupyter 实际靠 ipykernel 提供通信能力,而这个内核必须显式安装并注册到 Jupyter 的 specs 目录里。
- 检查是否装了:
python -m pip list | grep ipykernel(macOS/Linux)或python -m pip list | findstr ipykernel(Windows),无输出就立刻python -m pip install ipykernel - 注册命令必须在目标环境终端中运行(先
conda activate myenv或source venv/bin/activate),不能在 base 环境里装完再切过去 - 注册命令必须带
--user:否则可能写入系统级目录,VSCode 无权读取;正确写法是python -m ipykernel install --user --name myenv --display-name "Python (myenv)" -
--name不能含空格或中文,--display-name才是右上角下拉菜单里看到的名字
注册后 VSCode 还看不到 kernel 名字?
不是插件没装好,而是 VSCode 只从固定路径读取 kernel 定义:Linux/macOS 是 ~/.local/share/jupyter/kernels/,Windows 是 %USERPROFILE%\AppData\Roaming\jupyter\kernels\。路径里有空格或中文会导致注册失败,且 VSCode 不会报错,只会静默忽略。
微软正式发布 Visual Studio Code 1.118 版本 。本次更新重点强化了 AI 开发体验与企业管理能力,其中最引人注目的是新增 Copilot CLI 远程控制功能,允许开发者通过手机或网页远程监控和接管 AI 会话 。同时,为了提高 AI 的运行性价比,新版本优化了令牌缓存策略以降低成本 。此外,1.118 版还引入了 Chronicle 本地历史追踪、TypeScript 7.0 支持以及更严格的企业级访问管控 。
- 验证是否注册成功:在终端运行
jupyter kernelspec list,输出里应有你的myenv条目,且路径不含空格/中文 - 注册完必须重启整个 VSCode 窗口(不是“重载窗口”),否则新 kernel 不会出现
- 如果之前注册过但名字错了,删掉对应目录(如
~/.local/share/jupyter/kernels/myenv)再重装注册 - 确认两个扩展已启用:
ms-toolsai.jupyter(Jupyter)和ms-python.python(Python),缺一不可
运行单元格报 ModuleNotFoundError 怎么办?
这是最典型的“环境错位”:VSCode 界面显示选中了 ./venv/bin/python,但 kernel 启动时加载的却是系统 Python 的 site-packages。
- 在 notebook 里先运行:
import sys; print(sys.executable),对比输出路径和你选的 interpreter 是否一致 - 如果不一致,说明 kernel 绑定错了——删掉对应内核目录,重新在该环境下运行
python -m ipykernel install - 避免混用包管理器:conda 环境里别用
pip install ipykernel,优先conda install ipykernel;反之亦然 - 别依赖全局 jupyter:哪怕
jupyter --version能跑,只要 kernel 没注册进当前解释器,notebook 就无法连接
比 .ipynb 更稳的替代方案:# %% + .py 文件
直接编辑 .ipynb 在 Git 协作中极易冲突:输出、metadata、cell id 全是 JSON 差异,diff 不可读、合并易出错。而用 # %% 分隔的纯文本 .py 文件,既能获得 notebook 式交互体验,又保持版本控制友好。
- 新建
explore.py,写两段代码,中间加# %% - 光标放在任一段内,按
Shift+Enter,VSCode 自动打开交互式窗口执行 - 变量自动进 Variables 面板,
DataFrame双击可展开表格预览 - 不会因意外保存输出污染文件,也避免 kernel 重启丢失上下文
真正容易被忽略的是:VSCode 不会自动帮你把已装 jupyter 的环境“变成可用内核”,必须手动 python -m ipykernel install ——这一步漏了,前面所有操作都白搭。










