模型 / 資料集
StructuredLabs/preswald avatar
StructuredLabs/preswald

Preswald:把 Python 資料應用打包成單一 HTML 的 WASM 打包器

Preswald is a WASM packager for Python-based interactive data apps: bundle full complex data workflows, particularly visualizations, into single files, runnable completely in-browser, using Pyodide, DuckDB, Pandas, and Plotly, Matplotlib, etc. Build dashboards, reports, and notebooks that run offline, load fast, and share like a document.

4,272 個 Star646 個 ForkPythonApache-2.0

秒懂

它是什麼?
Preswald 用 Pyodide 與 DuckDB 把 Python 資料應用、資料與 UI 一起編譯成可離線執行的靜態檔案。它適合要把工具交給不想安裝環境的人,但不適合需要後端服務或大型資料集的場景。
適合誰用?
Preswald 適合要把資料檢視工具交給不願安裝 Python 環境的同事、或在氣隙環境中交付報告的團隊,也適合需要讓 AI 代理讀取與修改應用邏輯的場景。不適合需要伺服器端運算、共享資料庫寫入或超過瀏覽器記憶體上限的資料集。
可以商用嗎?
可以。Apache-2.0 是寬鬆授權:你可以使用、修改並販售以它為基礎的軟體,只需保留著作權與授權聲明。
還在維護嗎?
有在維護。儲存庫最近一次提交在 96 天前。
用什麼語言寫的?
主要是 Python(依據 GitHub 的語言統計)。

以上回答依據專案的 GitHub 資料(最近同步於 2026年9月15日)與我們的分析,不構成法律意見。

開源專案深度解析

Preswald 想解決的是交付問題,不是分析問題

資料分析工具很多,難的是把結果交出去。傳統做法要對方安裝 Python、複製程式碼、設定環境變數,或者把應用部署到伺服器上再開一個網址給人。Preswald 選擇第三條路:把整個應用編譯成靜態檔案。README 的定位寫得很直接,它是一個 static-site generator,把 compute、data access 與 UI 包進自帶執行環境的資料應用中。目標使用者是那些要把儀表板、報告或資料檢視工具交給利害關係人,而對方不該需要安裝任何東西的人。README 列出的適用情境包括:想把邏輯、UI 與資料綁成一個可分享檔案、要交付工具給不該安裝軟體的人、處理敏感資料需要完全本機控制、以及想給 AI 系統結構化且可修改的工具。這四種情境有一個共同點:交付路徑比分析能力更關鍵。

Pyodide 加 DuckDB:瀏覽器內的執行堆疊

Preswald 的執行模型建立在 WASM 之上。Python 直譯器由 Pyodide 提供,資料查詢由 DuckDB 在瀏覽器內處理,視覺化則可接 Plotly、Matplotlib 等函式庫。應用程式碼透過 preswald 提供的元件函式撰寫,例如 text、table、get_df。README 的範例是這樣:先 from preswald import text, table, get_df,接著 text("# Hello Preswald"),再用 get_df("sample.csv") 讀取資料,最後 table(df) 把資料表渲染出來。這個流程的關鍵在於 get_df 讀的是專案目錄下的檔案,而不是遠端資料庫。資料在打包時一併進入產出物,執行時由瀏覽器內的 DuckDB 處理查詢。反應式引擎的部分,README 說它由依賴關係的 DAG 驅動,只重跑需要重跑的部分。這表示當使用者在表單或篩選器上操作時,Preswald 會根據元件之間的依賴圖決定哪些計算需要重新執行。這個設計對於有多個圖表共享同一份資料的儀表板有實際意義,因為它避免了每次互動都重算全部內容。不過 README 沒有給出 DAG 的具體實作細節,也沒有說明依賴追蹤的粒度,這部分需要看原始碼才能確認。

從 preswald init 到 preswald export 的實際流程

安裝方式有兩種,README 列出 pip install preswald 與 uv pip install preswald。建立專案用 preswald init my_app,這個指令會產生一個目錄結構:hello.py 是應用邏輯、preswald.toml 是設定檔、secrets.toml 放 API 金鑰等機密資訊、data/sample.csv 是輸入資料、images/logo.png 是品牌圖檔。開發時在專案目錄下執行 preswald run,README 說它會啟動開發伺服器,預設位置是 http://localhost:8501。設定檔 preswald.toml 的結構分成幾個區塊。[project] 區塊定義 title、version、port、slug 與 entrypoint,其中 entrypoint 指向 hello.py,port 預設 8501。[branding] 區塊控制 name、logo、favicon 與 primaryColor。[logging] 區塊有 level 與 format,level 的選項是 DEBUG、INFO、WARNING、ERROR、CRITICAL。要交付成品時執行 preswald export,README 說這個指令會把應用建置成 dist/ 目錄下的靜態網站,內容包含透過 Pyodide 打包的 Python 程式碼、資料與 DuckDB 查詢,並保留 UI、邏輯與反應式狀態。產出物可以在任何現代瀏覽器中離線運作,也可以嵌入托管平台。

打包成靜態檔案的代價:資料規模與啟動延遲

把執行環境塞進瀏覽器有明確的物理限制。Pyodide 本身是一個不小的執行檔,瀏覽器需要先下載並初始化它,才能開始執行 Python 程式碼。這意味著應用首次載入的等待時間會比傳統伺服器渲染的頁面長。README 聲稱應用可以「runs offline, even with large data」,但沒有說明 large 的具體門檻,也沒有提供載入時間的數據。另一個限制來自記憶體。DuckDB 在瀏覽器內執行,可用的記憶體取決於瀏覽器分頁的配置,通常遠低於伺服器。如果你的資料集是數 GB 等級,或者需要在多個使用者之間共享寫入狀態,Preswald 不是合適的工具。還有一個容易被忽略的點:secrets.toml 在開發環境中存放 API 金鑰,但打包成靜態檔案後,任何在應用中使用的憑證都可能暴露在產出物中。README 沒有說明 export 時如何處理 secrets.toml,這是採用前必須自行確認的事項。如果你的應用需要呼叫外部 API,請確認金鑰不會被寫入 dist/ 目錄。

與 Streamlit 的差異:交付形態而非功能清單

Streamlit 是最常被拿來對比的工具,兩者都用 Python 寫資料應用,但交付模型完全不同。Streamlit 應用需要一個持續執行的 Python 伺服器,使用者透過瀏覽器連線到該伺服器,所有計算在伺服器端完成。Preswald 把計算移到使用者的瀏覽器中,應用本身是一個靜態檔案。這個差異決定了適用場景。Streamlit 適合內部工具,伺服器由團隊控制,資料留在資料庫裡,使用者透過網路存取。Preswald 適合對外交付,你把一個 HTML 檔案或資料夾交給對方,對方雙擊開啟就能使用,不需要網路,也不需要你維護任何伺服器。反過來說,Preswald 不適合需要集中管理使用者權限、審計日誌或共享狀態的場景,因為它根本沒有伺服器端。另一個差異是資料的處理時機。Streamlit 在每次互動時向伺服器請求資料,Preswald 在打包時就把資料嵌入應用中。這表示資料更新需要重新打包,而不是重新整理頁面。

版本節奏與維護成本

從 releases 來看,Preswald 在 2025 年 5 月底到 6 月初之間發布了 v0.1.57、v0.1.58 與 v0.1.59,間隔分別是數天與一週左右。這樣的速度在 0.1.x 階段算是活躍,但也意味著 API 可能還在變動。README 中的範例使用 from preswald import text, table, get_df,如果你在應用中依賴更多元件,升級時需要留意介面是否改變。維護成本主要來自兩個地方。第一是 Pyodide 與其相依套件的版本,這些底層元件的更新可能影響應用行為。第二是資料的重新打包,每次資料更新都需要執行一次 preswald export,如果你的資料來源經常變動,這個流程需要自動化。授權方面,Preswald 採用 Apache-2.0,這個授權允許商業使用、修改與再散布,但要求保留著作權聲明與授權條文。README 最後的授權段落被截斷,只顯示到 Apac,因此無法從現有材料確認是否有額外的條款。若你的法務部門對授權有疑問,請直接查閱專案根目錄的 LICENSE 檔案。

什麼時候該選 Preswald,什麼時候不該

如果你的交付對象不具備技術背景,或者身處網路受限的環境,Preswald 的單檔交付模式有實際價值。資料檢視工具、實驗結果面板、離線套件這幾種用途,README 都明確列出。它也適合需要讓 AI 代理讀取與修改應用邏輯的場景,因為應用是純 Python 程式碼,結構化程度高。不該選它的情況同樣清楚。需要多使用者協作、共享寫入、或伺服器端運算的應用,Preswald 的架構不支援。資料集超過瀏覽器記憶體上限時,DuckDB 在 WASM 中的表現會受限制。如果你的應用需要隱藏商業邏輯或 API 金鑰,靜態打包會把程式碼暴露給使用者。最後,如果你的團隊已經有成熟的 Streamlit 或 Dash 部署流程,改用 Preswald 意味著要重新思考交付與更新的方式,這個轉換成本需要納入評估。

編輯結論

Preswald 適合要把資料檢視工具交給不願安裝 Python 環境的同事、或在氣隙環境中交付報告的團隊,也適合需要讓 AI 代理讀取與修改應用邏輯的場景。不適合需要伺服器端運算、共享資料庫寫入或超過瀏覽器記憶體上限的資料集。採用前先確認三件事:你的資料在 Pyodide 中的載入時間、preswald export 產出的 dist/ 目錄是否真的能在目標瀏覽器離線開啟,以及 preswald.toml 中的 entrypoint 與 port 是否符合你的部署環境。

官方來源

  1. License: Apache-2.0
  2. Project website
  3. README
  4. Releases
  5. StructuredLabs/preswald on GitHub
社群筆記

社群筆記