為什麼在站上放一個瀏覽器 Python 執行器

發布: 約 3 分鐘

文章裡貼一段 Python,讀者若想隨手驗證,常常得開本機環境、建虛擬環境、再對版本——為了幾行示範,成本有點高。山姆鍋在本站做了一個——瀏覽器 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、或根本不該掛這麼重的東西,留言區在下面——不保證有人回,但歡迎辯。

直接使用 → 瀏覽器 Python

Sampot (山姆鍋)

獨立軟體開發者,專長分散式系統、Web 應用與雲端服務架構。目前一人開發NT² Vault:結構化數位資產保管箱。工作之餘關注開源軟體的發展與應用,偶爾在這裡碎念與分享。