Spy Notebook
Spy Notebook 是一款用于 SteelPython 的桌面笔记本:由 Python 和 Markdown 单元格组成的页面,在一个实时 Python 会话中逐个运行,每个单元格的输出——打印的文本、最后一行的值、回溯和图表——都显示在其下方。笔记本以纯 Markdown 文件保存,在任何编辑器和版本控制中都易于阅读;也可以打开和导出 Jupyter 笔记本(.ipynb)。

启动
从 SteelPython 的文件夹运行 SpyNotebook.exe。不指定文件时,它会打开你的默认笔记本(保存在 %APPDATA%\SteelPython\Spy Notebook\Default.md 中);SpyNotebook.exe analysis.md 会打开一个笔记本,File > Open 可以打开 .md 和 .ipynb 文件。
单元格
笔记本是一系列单元格。Python 单元格存放代码;Markdown 单元格存放笔记。所有 Python 单元格都在同一个会话中运行,因此在一个单元格中定义的变量或函数可以在其后的单元格中使用——与 Jupyter 的模型相同。
| 按键 | 功能 |
|---|---|
F3 / F4 |
添加 Python / Markdown 单元格(按住 Shift 可复制当前单元格) |
F5 或 Ctrl+Enter |
运行当前单元格,或仅运行其中选中的文本 |
Shift+Enter |
运行当前单元格并移到下一个 |
Ctrl+F5 |
清除所有输出并按顺序运行每个 Python 单元格(遇到第一个错误时停止) |
Tab / Ctrl+Space |
根据实时会话补全光标前的名称 |
F11 / F12 |
将当前单元格转换为 Markdown / Python |
Ctrl+Shift+Up / Down |
移动当前单元格及其输出 |
Ctrl+O / Ctrl+S |
打开 / 保存 |
输出
单元格下方会显示它打印的内容(输出到 stdout 和 stderr 的内容)、最后一行的值(如果它是表达式;在行尾加 ; 可以不显示)、失败时的回溯,以及它的图像:
- 单元格运行结束时,会显示每个打开的 matplotlib 图形,因此
plt.plot(...)不需要plt.show(); display(obj)会把具有_repr_png_方法的对象(例如 Pillow 图像)显示为图片,其他对象则显示为文本。
input() 在单元格中无法使用,因为没有可以输入的终端:请改为把值放在变量中,或用 Kernel > Arguments... 传入参数,它会设置 sys.argv[1:]。
停止和重新启动
单元格运行时,菜单栏右侧会有一个琥珀色指示器在转动,单元格的运行按钮会变成方块。单击其中任意一个,或使用 Run > Stop Running Cell,即可停止它:Python 会在该单元格中引发 KeyboardInterrupt,这会结束 time.sleep、网络等待或长循环,并保留你的变量。如果单元格在三秒内没有停止(卡在编译代码中,或自己捕获了 KeyboardInterrupt),则会通过重新启动会话来结束它;输出中会有一条说明。
Kernel > Restart Kernel 会启动一个没有任何变量的全新会话,Restart Kernel and Run All 则随后从头运行整个笔记本——这是检查笔记本能否从头到尾正常运行的可靠方法。
解释器、环境和包
状态栏显示笔记本的文件、单元格、解释器和会话状态(启动中、空闲、忙碌)。单击解释器,或使用 Kernel 菜单:
Kernel > Interpreter用于选择 SteelPython 本身,或笔记本所在文件夹中的虚拟环境(.venv、venv、env);Kernel > Create Virtual Environment...会在该文件夹中创建一个带有 pip 的环境,并切换到该环境;Kernel > Packages...用 pip 列出、安装、升级和卸载包。pip 独立于你的会话运行:你已经导入的包会保持旧版本,直到你重新启动内核。
文件格式
笔记本是一个 Markdown 文件。Python 单元格是标记为 Python 的代码围栏,单元格保存的输出跟在其后,位于标记为 Cache 的围栏中:
# Monthly sales
A small look at a year of sales figures.
```Python
total = sum([1475.6, 1554.8, 1593.26])
total
```
```Cache
4623.66
```
围栏之外的文本是 Markdown。图像在笔记本打开期间以及在 .ipynb 文件中会保留,但不会保存在仅包含文本的 Markdown 文件中。
该格式与 Pure Notebook 所用的格式相同,Pure Notebook 是 C# 的 Pure 的笔记本,因此同一个文件在两者中都能打开。Pure 笔记本中的 C# 单元格(标记为 C# 的围栏)会以只读方式显示,并标明不在此处运行,保存时保持不变。
Jupyter 笔记本
File > Import Jupyter Notebook...会读取.ipynb并将其保存为 Markdown 笔记本,保留文本输出和图像。- 也可以直接打开
.ipynb;此时它会保存为.ipynb。 File > Export会将笔记本写出为.ipynb(包含输出和图像)、Python 脚本,或不含输出的 Markdown。
从命令行使用
SpyNotebook.exe analysis.md open a notebook
SpyNotebook.exe analysis.md input.csv open it; its code sees sys.argv[1:] == ['input.csv']
SpyNotebook.exe --batch analysis.md run every Python cell without a window and print the output
SpyNotebook.exe --create new.md create an empty notebook
--batch 可以把笔记本变成一个脚本,供你计划运行或在构建中运行。
安全保障
在任何代码运行之前以及窗口关闭时,Spy Notebook 都会将笔记本以 <file>.backup 的形式写入其文件旁边,并在备份与已保存内容一致时再将其删除。如果程序或你的机器意外停止,备份中会保存你最新的单元格。Help > About 会显示报告问题时需要提供的版本号,并带有一个复制这些版本号的按钮。