入門
本頁假定你以前用過 Python。如果用過,那就沒什麼需要學的:SteelPython 的直譯器名為 spy,它接受的命令列與 python 相同。
找到 spy
SteelPython 計劃隨 Divooka Compute 一同提供。屆時,Divooka Compute 的資料夾中會包含 spy.exe(直譯器)、Misp.exe(IDE)和 SpyNotebook.exe(筆記本),以及位於 Lib\ 中的標準庫。要找到 Divooka Compute 的資料夾,請在 Steam 庫中右鍵按一下它,然後選擇 Manage > Browse local files。
若要在任意終端中執行 spy,請將包含 spy.exe 的資料夾新增到 PATH:從“開始”選單開啟 Edit environment variables for your account,選擇 Path,選擇 Edit,然後新增該資料夾。之後請開啟一個新的終端。使用獨立 SDK 的企業使用者可以讓其安裝程式完成這一步。
檢查它能否正常工作:
> spy --version
Python 3.12.13 (SteelPython 0.1.0)
互動式提示符
不帶參數執行 spy:
> spy
Python 3.12.13 (main, ...) [SteelPython 0.1.0 on .NET 10.0, 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> sum(n * n for n in range(10))
285
>>> exit()
它的行為與 CPython 的提示符相同:_ 儲存上一個結果,help() 可以使用,Tab 補全名稱,上下方向鍵瀏覽歷史記錄(與 CPython 一樣儲存在 ~\.python_history 中),exit() 退出。行編輯器支援常見的 Emacs 風格按鍵(Ctrl+A、Ctrl+E、Ctrl+K、Ctrl+R 搜尋歷史記錄等)。
spy -m asyncio 提供一個可以在頂層使用 await 的提示符,與 python -m asyncio 相同。
執行程式碼
spy script.py arg1 arg2 run a script; sys.argv is ['script.py', 'arg1', 'arg2']
spy -m package.module run a module as a script (spy -m pip, spy -m venv, spy -m http.server, ...)
spy -c "print('hello')" run a string of code
spy -i script.py run a script, then stay at the prompt with its variables
spy app.pyz run a zip application
CPython 的選項在這裡的作用與在 CPython 中相同:-u(無緩衝輸出)、-O、-W、-X、-E、-I、-S、-B、-q、-v,spy -h 會列出它們。CPython 的文件對它們有說明:命令列與環境。
環境變數也是如此:PYTHONPATH、PYTHONUNBUFFERED、PYTHONUTF8、PYTHONSTARTUP、PYTHONDONTWRITEBYTECODE 等。SteelPython 額外增加了一個:SPYPATH,設定該變數後,SteelPython 會讀取它來代替 PYTHONPATH,這樣就不必與同一臺機器上的 CPython 共用一個 PYTHONPATH。
轉換為 CPython 編寫的說明
文件和 README 檔案是為 CPython 編寫的。閱讀時請做以下替換:
| 文件中寫的是 | 在 SteelPython 中 |
|---|---|
python script.py |
spy script.py |
python -m pip install ... |
spy -m pip install ... |
python -m venv .venv |
spy -m venv .venv |
py -3.12 |
spy |
#!/usr/bin/env python3 |
(Windows 會忽略這一行;請用 spy 執行指令碼) |
在已啟用的虛擬環境中,pip 和已安裝包的命令可以照常直接按名稱使用(包與環境)。
檢查程式碼是否在 SteelPython 上執行
import sys
print(sys.implementation.name) # 'steelpython'
print(sys.version) # '3.12.13 (main, ...) [SteelPython 0.1.0 on .NET 10.0, 64 bit (AMD64)]'
在 SteelPython 上,platform.python_implementation() 會返回 'CPython',這是有意為之:檢查它的包想知道 CPython 的 C API 和行為是否可用,而在 SteelPython 上它們是可用的。當你自己的程式碼需要區分兩者時,請檢查 sys.implementation.name == "steelpython"。
後續步驟
- 安裝一些包:包與環境。
- 在 Misp 中編寫和除錯程式碼,或在 Spy Notebook 中探索資料。
- 在移植大型程式之前,請閱讀 與 CPython 的差異。