简体中文
English 简体中文 繁體中文
Methodox 首页

Spy Notebook

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

打开名为 Sales.md 的笔记本的 Spy Notebook:一个标题为 Monthly sales 的 Markdown 单元格,一个构建 pandas DataFrame 并以其前几行作为输出的 Python 单元格,以及一个绘制按月收入 matplotlib 柱状图的 Python 单元格,图像显示在单元格下方

启动

从 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 会显示报告问题时需要提供的版本号,并带有一个复制这些版本号的按钮。