%history 是 IPython 内核内置的轻量级命令历史查看工具记录了当前会话中执行的所有工具 Python 代码,魔法命令和 shell 支持显示、搜索、导出等功能的命令,但不会自动持久。直接用
%history 检查执行的命令和代码
所有执行过的 Python 代码,魔法命令,甚至 shell 命令(如 !ls),都会被 Jupyter 记录在内存历史中。%history 不依赖任何扩展或配置的检查方法是最轻的,不需要安装依赖。
常见用法:
-
%history:展示所有历史(可能很长) -
%history -l 10:只显示最近 10 条 -
%history ~1/5-10:显示最后一次会话(~1)中第 5 到第 10 条命令 -
%history -g "pandas":全局搜索含pandas历史记录(支持模糊匹配)
注意:%history 只保存当前核心会话的内容。重启核心后,历史被清空;关闭浏览器,但没有重启核心,历史仍然保留。
%history 比浏览器控制台日志更可靠
在终端启动时打印的日志(如 jupyter notebook 命令输出)只包括服务器启动、内核连接等系统级事件,不记录您写的每行代码。而且 %history 是 IPython 内核本身维护的执行轨迹精度高,粒度细 a = 1 和 print(a) 都是单独形成的。
容易踩的坑:
- 误以为「命令行里按 ↑ 能翻出的历史」是全部——其实只是当前单元格的编辑历史,而不是跨单元格的执行历史
- 用
%save忘记保存历史到文件时添加文件-r结果只保存了编号,没有实际内容 - 远程内核(如 JupyterHub 或 SSH 在连接中执行
%history,远程服务器上的记录不是本地终端
Jupyter 默认不会把 %history 写入磁盘。即使你关闭浏览器,只要核心没有重启,历史还在;但当核心崩溃或服务器重启时,它就会丢失。
Jupyter Notebook 7.5.4
Jupyter Notebook 7.5.4 官方 PyPI wheel 包下载适用于本地交互式代码运行、数据分析、教学演示和文件配置实践。
下载手动落盘建议:
- 运行
%history -g -f history.py导出带搜索关键词的历史 Python 文件 - 用
%save -r 1-100 filename.py保存指定范围内的输入行(不含输出) - 定期执行
%store my_var存变量,配合%store -r恢复-但不存储代码,只存储变量值
第三方扩展(如 jupyter_contrib_nbextensions 的 History 直观面板)可以图形化显示,但依赖于前端渲染,不能跨内核共享。如果你真的想长期归档,你仍然需要主动导出 + 版本管理。
常见的假“丢失”场景:
- 单元格是 Markdown 根本没有执行类型——
%history只记住执行过的代码单元格 - 代码错误报告中断,但错误之前的部分已经执行(例如)
a=1; b/0中a=1会被记录在历史中) - 用了
%%writefile或%run在当前的会话历史中,脚本中的代码不会出现在外部脚本中 - 在 PyCharm 的 Jupyter 单元格在工具窗口中运行,部分版本有历史同步延迟。建议将其切换回原始浏览器验证
最安全的验证方法:在新单元格中执行 %who 或 list(globals().keys()),看看变量是否存在-存在,说明相应的代码确实运行过,但没有 %history 捕获(很少见),大概率是你记错了单元格类型或执行路径。