最常见原因是Jupyter扩展未安装或被禁用;VS Code交互式窗口依赖Jupyter内核,需同时启用Python和Jupyter扩展、选中含ipykernel的解释器、文件为.py或.ipynb后缀,且路径不含中文或空格。

为什么 Shift+Enter 没反应或弹出新 .py 文件
最常见原因是 Jupyter 扩展没装或被禁用。VS Code 的交互式窗口不是纯 Python 解释器,而是基于 Jupyter 内核的轻量前端,Python 扩展单独存在时,Shift+Enter 只会尝试运行文件,不会启动交互窗口。
- 检查是否已安装并启用
Jupyter扩展(微软官方,ID: ms-toolsai.jupyter) - 确认已通过
Ctrl+Shift+P→Python: Select Interpreter选中一个带ipykernel的环境(比如 conda env 或 venv 中执行过python -m pip install ipykernel) - 当前文件必须是
.py或.ipynb后缀;.txt、无后缀或路径含中文/空格过多都可能触发内核启动失败
# %% 单元格标记不生效的典型写法错误
# %% 是在 .py 文件中划分可执行单元的唯一方式,但它对格式极其敏感,且仅在 Python 文件中起作用。
- 必须独占一行:
#%%或# %%✅;# %%(开头空格)❌ - 不能跟在语句后面:
x = 1 # %%❌;注释必须单独成行 - 在
.ipynb文件里# %%完全无效——此时该用 Notebook 原生 cell 分割线(---或顶部加号按钮) - 某些 linter(如
pylint)会报invalid-name警告,可在.pylintrc中加disable=invalid-name,不影响执行
如何让多个交互式窗口复用同一个内核
默认行为是每次打开新窗口都启一个新内核,变量不共享、内存不复用,容易误以为“上一次定义的 df 怎么没了”。关键不是重启窗口,而是统一内核来源。
- 先在终端中注册一个命名内核:
jupyter kernel install --user --name myenv --display-name "My Env" - 再在 VS Code 中按
Ctrl+Shift+P→Python: Select Interpreter,选中这个My Env(它会自动关联到刚注册的内核) - 后续所有
.py或.ipynb文件用Shift+Enter启动的交互窗口,默认复用该内核 - 注意:不同 Python 版本的内核完全隔离,
Python 3.9内核里定义的变量,在Python 3.11窗口里不可见
交互式窗口 vs 终端中 python 命令的区别
很多人误把终端里敲 python 进入的 REPL 当成交互式窗口,其实二者底层不同:前者是纯 CPython 解释器,后者是 Jupyter 内核 + VS Code 渲染层,支持富文本输出、变量面板、内联图表、历史回溯等。
立即学习“Python免费学习笔记(深入)”;
- 交互式窗口能直接显示
df.head()表格、plt.show()图形(需开启%matplotlib inline),终端不行 - 交互式窗口右上角显示当前 kernel 名(如
Python 3.11),右键可切换或连接已有内核;终端没有这个概念 - 想从编辑器快速发代码过去?选中 →
Shift+Enter;想从窗口复制输出?直接拖选或右键 →Copy;这些操作在普通终端里要么不支持,要么要手动粘贴
真正容易被忽略的是上下文归属问题:你同时开着三个 .py 文件、一个 .ipynb、一个终端里的 ipython,它们各自跑在不同进程、不同内核、不同变量空间里。df 在 A 窗口定义了,不代表 B 窗口能访问——这不是 bug,是设计如此。别指望“全局变量”,得靠明确的 kernel 复用或数据导出/导入。


















