VSCode怎么运行python脚本和单元格
详细讲解在 Visual Studio Code 中运行整份 Python 脚本与执行交互式单元格的具体方法、环境配置、常用快捷键、执行机制差异及常见运行问题排查。
.py 文件的全部代码,适合构建完整的程序、自动化工具与工程项目;运行单元格时,VSCode 利用 Jupyter 内核在右侧呼出交互式窗口或以 Notebook 形式分块执行,变量和数据会长久驻留在内存中,适合数据分析、模型调优与分段测试。本文将以清晰的步骤说明这两种运行方式的操作方法、核心快捷键与关键配置。
一、准备工作:扩展安装与解释器选择
在进行任何代码运行前,需要确保 VSCode 已经正确识别到计算机中的 Python 环境。VSCode 本身只是代码编辑器,并不内置 Python 解释器与运行运行时。
1. 安装核心扩展
打开 VSCode 左侧活动栏中的“扩展”图标(快捷键 Ctrl+Shift+X 或 macOS 下的 Cmd+Shift+X),搜索并安装以下两个官方扩展:
- Python(由 Microsoft 发布):提供代码补全、语法高亮、代码格式化、调试支持以及脚本运行菜单。
- Jupyter(由 Microsoft 发布):提供交互式窗口(Interactive Window)、单元格执行支持以及
.ipynb笔记本原生界面。
2. 选择 Python 解释器(Select Interpreter)
安装扩展后,打开一个包含 Python 代码的工作区文件夹或脚本。按快捷键 Ctrl+Shift+P(macOS 下为 Cmd+Shift+P)调出命令面板,输入并选择:
Python: Select Interpreter
列表中会列出检测到的全部 Python 环境(包括全局系统环境、Conda 环境、venv 或 pipenv 虚拟环境)。请点击选择与当前项目依赖匹配的 Python 解释器路径。选择完成后,VSCode 底部状态栏右下角会明确显示当前使用的 Python 版本与虚拟环境名称。
二、运行整份 Python 脚本(.py 文件)
运行整份脚本是开发自动化脚本、CLI 命令行工具、Web 服务端(如 Flask/FastAPI)及日常算法题的经典方式。此时,整个代码文件会作为一个独立的进程从第一行顺序执行到最后一行。
1. 常见的三种运行操作
-
右上角播放按钮(Run Python File):
在打开的.py代码文件右上角,可以看到一个实心三角的“播放”图标。点击下拉菜单并选择 “Run Python File”。VSCode 会在下方调出内置终端(Integrated Terminal),自动激活当前选择的 Python 环境并输入执行命令。 -
右键菜单执行:
在编辑器代码任意空白区域点击鼠标右键,在上下文菜单中选择 “在终端中运行 Python 文件”(Run Python File in Terminal)。 -
在集成终端中直接输入命令:
按快捷键 Ctrl+`(反引号)打开终端,直接输入命令并回车:
示例输出:python main.py[DataProcessor] 读取数据完成,共 1000 条记录 [DataProcessor] 计算平均值:42.85 [DataProcessor] 任务顺利结束,耗时 0.42 秒
2. 运行脚本的关键注意事项:工作目录(cwd)
初学者在运行脚本时最常见的一个困惑是:在代码中写相对路径读取文件(如 open("data/config.json")),在终端直接执行有时能读到,点右上角播放按钮却报 FileNotFoundError。
其原因在于:Python 解析相对路径的基准并不是当前 .py 文件所在的物理位置,而是执行该命令时当前终端的工作目录(Current Working Directory, cwd)。如果你的 VSCode 打开的是整个项目根目录,而脚本存放在 src/scripts/main.py,点击播放按钮时终端默认停留在项目根目录下,导致相对路径寻找失败。
cd 到该脚本所在的子目录,可以在 VSCode 设置(settings.json)中加入如下配置:
"python.terminal.executeInFileDir": true
三、运行交互式单元格(Cell)
在进行数据处理、机器学习训练或探索性编程时,通常不需要反复重新跑整份脚本。VSCode 提供了两种执行单元格的形式:在普通 .py 脚本中使用 #%% 划分单元格,以及直接在 .ipynb 笔记本中运行单元格。
1. 在普通 .py 脚本中使用 #%% 单元格(推荐技巧)
很多人误以为单元格是 Jupyter Notebook(.ipynb)专属的功能,其实在 VSCode 中,只要在普通的 Python 脚本文件中加入 #%% 或 # %% 注释标记,VSCode 就会立即将后续代码识别为一个独立的单元格(Code Cell)。
一旦输入 #%%,该行上方就会自动浮现出轻量化的 CodeLens 操作按钮:[Run Cell]、[Run Below] 与 [Debug Cell]。
# demo.py
#%% 第一单元格:准备数据
import numpy as np
import pandas as pd
raw_data = np.random.randn(100, 3)
df = pd.DataFrame(raw_data, columns=['Alpha', 'Beta', 'Gamma'])
print(f"数据形状: {df.shape}")
#%% 第二单元格:执行统计与处理
mean_values = df.mean()
print("均值统计:")
print(mean_values)
#%% 第三单元格:过滤筛选
filtered_df = df[df['Alpha'] > 0]
print(f"筛选后行数: {len(filtered_df)}")
执行方法与常用快捷键:
- 直接点击 CodeLens:鼠标直接点击
#%%上方的 “Run Cell” 文字。 - Shift + Enter:执行当前光标所在的单元格,并在执行完毕后自动将光标跳到下一个单元格。如果是首次执行,VSCode 会在右侧自动展开 Interactive(交互式) 窗口。
- Ctrl + Enter:执行当前单元格,但光标依然保留在当前单元格内。
2. 在 Jupyter Notebook(.ipynb)文件中运行单元格
如果你直接新建或打开以 .ipynb 结尾的文件,VSCode 会以原生 Notebook 笔记本的视图打开:
- 每个单元格左侧都有一个圆形或方形的播放三角形,点击即可运行该单元格。
- 选中单元格后,按下 Shift+Enter 运行并选中下一格,按下 Ctrl+Enter 运行当前格,按下 Alt+Enter 运行当前格并在下方新建空白格。
- 在笔记本右上角点击 “Select Kernel”,确保选中的内核与项目解释器一致。
四、容易混淆的认知辨析与场景选型
在实际使用中,读者常对脚本与单元格的边界产生一些误解,厘清这些差异有助于选出最合适的工作流。
1. 误区辨析
-
误区一:“单元格只能存在于 .ipynb 格式中”
辨析:这是最普遍的认知偏差。Jupyter Notebook 的.ipynb文件本质上是一个复杂的 JSON 文件,包含大量的元数据、base64 编码的输出图片和单元格状态,在 Git 版本控制中做分支合并(Merge)和代码审查(Code Review)极易发生冲突。而在 VSCode 中,使用普通的.py脚本加上#%%注释,既保持了纯文本脚本易于版本控制、导入和复用的优势,又能完整享受单元格分步执行、右侧图形渲染的便利。 -
误区二:“单元格执行和直接运行脚本是完全等价的”
辨析:两者在执行状态上有本质区别。直接运行脚本每次都会拉起干净的全新进程,上一轮运行无论产生何种变量都不会残留;而单元格运行在后台守护的ipykernel内核中,只要会话未重启,你在任何单元格内修改、删除或重定义的变量都会一直停留在内存中。如果按非顺序执行单元格(例如先跑第 3 格,再修改第 1 格,又跳过第 2 格直接跑第 3 格),可能会产生难以察觉的“隐式状态污染”。
2. 两种运行方式的适用场景对比
| 对比维度 | 整份脚本运行 (Run Python File) | 交互式单元格运行 (#%% / .ipynb) |
|---|---|---|
| 执行载体 | 内置系统终端(bash / zsh / PowerShell) | Jupyter Interactive 窗口 / 笔记本编辑区 |
| 进程与状态 | 单次执行,进程随代码结束而退出,内存清空 | 内核常驻,变量与数据持久保留在当前会话中 |
| 输出形式 | 文本输出、日志流;图形需弹出外部 GUI 窗口 | 图表直接内嵌渲染、Markdown 文档、表格交互查看 |
| 版本控制友好度 | 极高(纯代码 .py,Diff 差异清晰) |
#%% 模式极高;.ipynb 模式容易产生大体积 diff |
| 最适适用场景 | 生产服务、批处理工具、定时任务、完整测试 | 数据探索、机器学习建模、参数微调、快速算法验算 |
五、常见问题与注意事项
1. 为什么在单元格运行绘图(Matplotlib)不显示图像?
在整份脚本运行模式下,绘制图表后必须显式调用 plt.show() 才会弹出一个 GUI 独立窗口;而在 VSCode 交互式单元格中,Jupyter 扩展会自动捕获绘图对象并将其直接内嵌在右侧交互窗口中。如果发现图表未渲染,请检查代码末尾是否遗漏了 plt.show(),或在代码首行加上:
%matplotlib inline
2. 运行多个单元格时如何保持纯净的环境验证?
在进行探索性单元格编程时,由于执行顺序往往是跳跃的,代码在你的机器上虽然“看起来跑通了”,但换到其他环境或者直接作为脚本执行时可能会因为缺少变量定义而失败。为了验证代码逻辑的完整性,推荐在完成开发后,点击交互式窗口顶部的 “Restart Kernel and Run All Cells”(重启内核并运行全部单元格) 按钮,确保代码从头到尾能够无依赖中断地顺序通过。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









