Pyodide:基於 WebAssembly 的 Python 發行版
Pyodide 是將 CPython 移植到 WebAssembly 的版本,讓您能在瀏覽器或 Node.js 中安裝並執行 Python 套件及 NumPy、pandas 等科學運算函式庫。它具備強大的 JavaScript 與 Python 外部函數介面,使兩種語言能流暢混用並完整存取 Web API。
背景
Pyodide 是一個基於 WebAssembly (Wasm) 的 Python 發行版,旨在讓 Python 能夠在瀏覽器與 Node.js 環境中運行。它最初由 Mozilla 的 Michael Droettboom 於 2018 年開發,作為 Iodide 筆記本專案的一部分,目前已發展成為一個成熟的開源專案,支援包含 NumPy、Pandas 與 Scikit-learn 在內的眾多科學計算套件,並提供 Python 與 JavaScript 之間流暢的雙向調用能力。
社群觀點
在 Hacker News 的討論中,Pyodide 被譽為 Python 生態系中「隱藏的寶石」。許多開發者分享了其在教育與輕量級應用上的成功案例,例如 Jupyterlite 便是利用 Pyodide 讓學生只需透過靜態網頁就能執行 Python 代碼,無需配置後端伺服器。此外,Pyodide 在 Excel 增益集(如 xlwings Lite)的應用也引起關注,其在隱私、速度與離線存取能力上,甚至被認為優於微軟官方提供的 Python 解決方案。
然而,效能與載入成本仍是社群關注的焦點。有開發者指出,雖然 Pyodide 讓 Python 代碼能「直接在網頁執行」的體驗非常神奇,但一旦涉及 NumPy 或 SciPy 等大型科學套件,載入時間可能長達十秒以上。相比之下,將邏輯預先轉換為純 JavaScript 執行的方案,載入速度僅需數百毫秒。這顯示 Pyodide 目前更適合用於對啟動速度要求不高、但需要強大數據處理能力的互動式工具或數據視覺化專案。
關於沙盒化(Sandboxing)的討論也相當熱烈。雖然有人嘗試將其用於 Node.js 環境下的代碼代理人(Code Agents)沙盒,但社群成員提醒,Pyodide 在伺服器端的限制較多,例如外部 URL 抓取通常需要透過代理伺服器。目前 ChatGPT 的 Canvas 功能確實使用了 Pyodide 進行沙盒化處理,但對於更複雜的代理人任務,開發者多半仍傾向使用傳統的容器技術或專門的 Wasm 執行環境如 Wasmtime。
最後,討論串也觸及了 WebAssembly 的整體發展現狀。部分評論者對 Wasm 的普及速度感到失望,認為其發展十年後仍未達到 HTML/CSS 的普及程度。但支持者反駁指出,隨著垃圾回收(GC)支援的完善以及對 JavaScript 墊片層依賴的減少,Wasm 的潛力尚未完全釋放。Pyodide 作為該領域的成熟案例,證明了 Wasm 確實能讓原本受限於桌面端的強大工具在瀏覽器中重獲新生。
延伸閱讀
- Jupyterlite:基於 Pyodide 的瀏覽器端 Jupyter 實驗室環境。
- xlwings Lite:利用 Pyodide 強化 Excel 功能的開源增益集。
- Pyodide Sandbox 實驗:Simon Willison 針對 Deno 環境下使用 Pyodide 進行沙盒化的研究筆記。
- playcode.io:基於 Pyodide 構建的線上 Python 整合開發環境。
- codeplug.org:使用 Pyodide 開發的無線電對講機編程網頁應用。