根本原因是jupyter扩展未安装或禁用;必须同时满足:jupyter扩展已启用、python解释器选对且含ipykernel、文件后缀为.py或.ipynb。

为什么 Shift+Enter 没反应,或只打开新 .py 文件
根本原因不是配置错了,而是 Jupyter 扩展压根没装或被禁用。VSCode 的交互式窗口(Interactive Window)不是 Python 扩展单独提供的功能,它依赖 Jupyter 扩展作为内核前端——只装 Python 扩展,Shift+Enter 会静默失败,甚至新建一个空白 .py 文件。
必须确认以下三点同时满足:
-
Jupyter扩展已安装且启用(在 Extensions 商店搜 “Jupyter”,认准 Microsoft 官方图标) - 已通过
Ctrl+Shift+P→Python: Select Interpreter选中一个带ipykernel的环境(比如 conda env 或 venv 中执行过python -m pip install ipykernel) - 当前文件是
.py或.ipynb后缀;纯文本、.txt、未保存的 untitled 文件都不行
# %% 单元格标记不生效的典型场景
# %% 是在 .py 文件里划分代码单元的唯一方式,但它对格式极其敏感,常见失效点:
- 必须独占一行,且开头不能有空格:
#%%或# %%✅,# %%❌(前面多一个空格就识别不了) - 不能跟在语句后:
x = 1 # %%❌,注释必须单独成行 - 如果文件是以
.ipynb格式打开的,# %%完全被忽略——此时该用 Notebook 原生的 cell 分割(顶部加号或---) - 某些 linter(如
pylint)会报# %%是无效注释,可在.pylintrc加disable=invalid-name忽略,不影响运行
如何让多个交互式窗口共享同一内核和变量
默认行为是每次打开新交互式窗口都启一个全新内核,导致你在 A 窗口定义的 df,切到 B 窗口就报 NameError。这不是 bug,是设计如此。要复用内核,有两种可靠方式:
- 右键交互式窗口右上角显示的 kernel 名(如
Python 3.11)→Change Kernel→Existing…→ 选一个已在运行的内核 - 更稳的做法:先在终端运行
jupyter kernel install --user --name myenv --display-name "My Env",再用Python: Select Interpreter选这个myenv,之后所有新窗口默认复用它 - 注意:
Python 3.9和Python 3.11的内核完全隔离,变量、导入模块、工作路径互不可见
想直接用 IPython 终端?别绕弯子
如果你只是想进一个带自动补全、历史命令、%timeit 这类 magic 的交互环境,不需要 Notebook 功能,最直白的方式就是开集成终端跑 ipython:
- 确保目标环境中已安装:
pip install ipykernel ipython - 在 VSCode 中按
Ctrl+`打开集成终端,输入ipython回车,看到In [1]:就成功了 - 不需要改
settings.json或配code-runner;那些配置容易因版本更新失效,而手动敲ipython永远有效 - 如果报
command not found: ipython,说明当前终端没激活对应环境,先source venv/bin/activate(Linux/macOS)或venv\Scripts\activate(Windows)
真正难的从来不是怎么启动窗口,而是你同时开着三个 .py 文件、两个 .ipynb、一个终端里的 ipython,还点了三次 Shift+Enter——这时候你得盯住右上角 kernel 名,再看一眼当前编辑器后缀和文件路径,才能确定刚才那行 print(df.shape) 到底跑在哪个进程、哪份内存里。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!











