VSCode Notebook 的 .ipynb 文件会越变越大,是因为每次运行 cell 时输出(图像、DataFrame、大数组、日志)以 base64 编码后存入 JSON,重复运行还会累积多份;推荐用 VSCode 的“Jupyter: Clear All Outputs”命令或 jupyter nbconvert --clear-output --inplace 批量清理。

为什么 VSCode Notebook 的 .ipynb 文件会越变越大?
因为每次运行 cell,输出(尤其是图像、DataFrame 表格、大数组、print() 日志)都会以 JSON 格式原样存进文件里。一张 2MB 的 matplotlib 图片,会被 base64 编码后塞进 JSON,实际占用可能翻倍;反复运行还可能累积多份重复输出。这不是 VSCode 的 bug,而是 Jupyter Notebook 格式的默认行为。
手动清除所有输出:用 VSCode 内置命令最稳妥
VSCode 自带的 Jupyter: Clear All Outputs 命令能安全删掉所有 cell 输出,保留代码和 Markdown——这是最常用、最不易出错的方式。
- 快捷键:
Ctrl+Shift+P(Windows/Linux)或Cmd+Shift+P(macOS),输入Jupyter: Clear All Outputs,回车 - 右键 notebook 编辑器空白处 → 选择
Clear All Outputs - 注意:该操作不可撤销,建议先保存或提交 Git
- 它不会删除
metadata中的 kernel 信息或执行计数,只清outputs和execution_count字段
批量清理多个 notebook:用 jupyter nbconvert 脚本化处理
如果你有十几个 notebook 要统一清理(比如提交前整理仓库),手动点太慢,直接调用 Jupyter 官方工具更可靠:
jupyter nbconvert --clear-output --inplace *.ipynb
说明:
-
--clear-output:清空所有 cell 输出 -
--inplace:直接修改原文件(不生成新文件) - 支持通配符,如
notebooks/*.ipynb;加--log-level=ERROR可抑制提示 - 注意:该命令依赖系统已安装
jupyter(不是仅装了 VSCode 的 Python 扩展),可通过pip install jupyter补全
自动清理:保存时禁用输出写入(但有副作用)
VSCode 支持在 settings.json 中配置 "jupyter.saveAllCellsOnSave": false 和 "jupyter.askForKernelRestart": false,但真正控制输出是否落盘的是这个关键项:
"jupyter.generateSVGPlots": false
不过更根本的方案是配合 nbstripout 或 Git filter,在提交时自动 strip 输出——但这需要团队协同配置,单机用户容易漏设或误清代码。对多数人来说,养成「运行完、确认结果、立刻手动清输出」的习惯,比依赖自动化更可控。
真正容易被忽略的是:清理后记得检查 git diff ——有时看似没改代码,但输出清除会让 JSON 结构变化,导致大量行变更,影响 code review。如果 notebook 里真要保留某张图作文档,就别清,而是用 %config InlineBackend.figure_formats = {'png'} 控制导出格式,从源头压体积。











