繁體中文
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 會顯示報告問題時需要提供的版本號,並帶有一個複製這些版本號的按鈕。