文章裡貼一段 Python,讀者若想隨手驗證,常常得開本機環境、建虛擬環境、再對版本——為了幾行示範,成本有點高。山姆鍋在本站做了一個——瀏覽器 Python——讓片段可以在分頁裡跑完。
這篇不是操作手冊。要執行請直接用工具;這裡只講為什麼要自己做、以及邊界畫在哪裡。
目錄
為什麼不是叫大家開本機就好
對寫文章的人來說,「請讀者自行安裝 Python」從來不是錯,只是摩擦大。尤其片段只是說明一個概念、一個小演算法、或一段字串處理時,本機環境反而喧賓奪主。
線上也有現成的線上 REPL。山姆鍋還是想掛在自己站上,理由跟 base 編解碼工具 類似:路徑固定好連、限制能寫清楚、不必每次評估陌生網站會不會多做手腳。差別在於這次執行環境本身很大——不是幾十行編解碼邏輯,而是一整個瀏覽器裡的 CPython。
為什麼選 Pyodide,又為什麼用 CDN
工具用的是 Pyodide:把 CPython 編到 WebAssembly,語感最接近「真的 Python」,而不是另一套半相容的轉譯器。文章片段若依賴常見套件,也可以走 micropip 安裝(當然仍受 Pyodide/wheel 生態限制,不是完整 pip)。
執行期檔案從 jsDelivr CDN 載入,而不是塞進本站建置產物。取捨很直白:
- 本站靜態部署不必扛十幾 MB 的 WASM/stdlib;
- 版本釘死在工具裡(目前 Pyodide
0.27.7),可預期; - 代價是首次使用一定要連網;套件安裝也會連到 Pyodide/PyPI 相關 CDN。
本站伺服器仍然收不到你貼進編輯區的程式碼——那條路徑是「輸入框 → 本機 Worker → Pyodide」。但「資料完全不出瀏覽器」在裝套件時不成立:wheel 本來就要下載。隱私敘事必須講清楚這條線。
離線方面,站上工具採「造訪過才可能離線」的 runtime cache。Python 執行器還多一層:就算工具頁被快取了,Pyodide 本體在 CDN,瀏覽器自己的快取與否不由本站保證。別把這頁當成無網環境的正式 Python。
網址預填與分享
文章可以連到工具並帶上片段。工具支援:
#s=…:把程式碼與套件清單打包進 hash(複製分享連結會用這個);- 較簡單的
?code=/#code=(可選packages=)。
這樣介紹文或舊文只要加一個「在工具裡試試」連結,不必把 Pyodide 塞進每一篇文章的頁面——文章保持輕,沙盒集中在 /tools/python-runner/。
刻意不做什麼
- 不做文章內嵌的自動可跑 code block。 每個程式碼區塊都載入執行期,對多數讀者是噪音與流量懲罰。
- 不當成完整 Jupyter/多檔專案環境。 沒有 notebook 檔、沒有完整檔案總管;需要那些時請用本機或專門服務。
- 不保證任意 PyPI 套件都能裝、都能跑。 沒有對應 wheel、或依賴原生擴充的,在瀏覽器就是不行。
- 中斷等於重建 Worker。 沒有上完整的跨執行緒中斷協定;長迴圈可按中斷,但會重新載入環境。
少而穩:夠用來驗證文中片段,就達標。
小結
這個工具存在的理由很單純:站上常寫 Python,希望讀者少開一層本機環境,又不必把執行沙盒攤進每一篇文章。有用就放著;不代表誰一定天天開。若你也覺得用得上,歡迎直接用;若覺得該自托管 WASM、或根本不該掛這麼重的東西,留言區在下面——不保證有人回,但歡迎辯。