[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"article-pypi-wasm-wheels-pyodide-zh":3,"article-related-pypi-wasm-wheels-pyodide-zh":31,"series-tools-434cf6ed-e754-4dd7-be27-1aa0bc38761e":76},{"id":4,"slug":5,"title":6,"content":7,"summary":8,"source":9,"source_url":10,"author":11,"image_url":12,"cover_image":12,"category":13,"language":14,"translated_content":11,"related_article_id":15,"keywords":16,"key_takeaways":23,"views":27,"created_at":28,"published_at":29,"topic_cluster_id":30},"434cf6ed-e754-4dd7-be27-1aa0bc38761e","pypi-wasm-wheels-pyodide-zh","PyPI 開始收 WASM wheel，Pyodide 包裝順多了","\u003Cp data-speakable=\"summary\">PyPI 現在能收 Pyodide 可用的 WASM wheel，讓瀏覽器版 Python 的套件發佈流程簡單很多。\u003C\u002Fp>\u003Cp>這件事看起來小，實際上很有感。\u003Ca href=\"https:\u002F\u002Fpyodide.org\u002Fen\u002Fstable\u002F\" target=\"_blank\" rel=\"noopener\">Pyodide\u003C\u002Fa> 是把 Python 編譯到 WebAssembly 的專案，主打在瀏覽器裡直接跑 Python。以前它最大的痛點不是執行速度，而是套件包裝。\u003C\u002Fp>\u003Cp>2026 年 6 月 13 日，\u003Ca href=\"https:\u002F\u002Fsimonwillison.net\u002F\" target=\"_blank\" rel=\"noopener\">Simon Willison\u003C\u002Fa> 提到，現在能把 WebAssembly 版 Python 套件直接發到 \u003Ca href=\"https:\u002F\u002Fpypi.org\u002F\" target=\"_blank\" rel=\"noopener\">PyPI\u003C\u002Fa>。這代表 Pyodide 不用再走一條很怪的分發路線。對開發者來說，這種改動比宣傳詞實在多了。\u003C\u002Fp>\u003Cp>更直白地說，這是把「瀏覽器版 Python」拉回正常軟體發佈流程。以前像特例，現在比較像一般套件管理。\u003C\u002Fp>\u003Ctable>\u003Cthead>\u003Ctr>\u003Cth>指標\u003C\u002Fth>\u003Cth>數值\u003C\u002Fth>\u003Cth>意義\u003C\u002Fth>\u003C\u002Ftr>\u003C\u002Fthead>\u003Ctbody>\u003Ctr>\u003Ctd>Pyodide 團隊原本維護的套件數\u003C\u002Ftd>\u003Ctd>300+\u003C\u002Ftd>\u003Ctd>手動包裝壓力很大\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>已使用新 WASM 標籤的 PyPI 套件\u003C\u002Ftd>\u003Ctd>28\u003C\u002Ftd>\u003Ctd>代表新流程已經有人在用\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fsimonw\u002Fluau-wasm\" target=\"_blank\" rel=\"noopener\">luau-wasm\u003C\u002Fa> wheel 大小\u003C\u002Ftd>\u003Ctd>276 KB\u003C\u002Ftd>\u003Ctd>顯示瀏覽器可用 wheel 可以很小\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>PyPI PR 合併日期\u003C\u002Ftd>\u003Ctd>2026-04-21\u003C\u002Ftd>\u003Ctd>這不是構想，已經落地\u003C\u002Ftd>\u003C\u002Ftr>\u003C\u002Ftbody>\u003C\u002Ftable>\u003Ch2>PyPI 到底改了什麼\u003C\u002Fh2>\u003Cp>這次核心更新，是 PyPI 新增了一種 wheel 平台標籤：\u003Ccode>pyemscripten_202*_wasm32\u003C\u002Fcode>。講白了，就是讓套件作者可以把 WebAssembly 版本的 wheel 當成正常 wheel 上傳。\u003C\u002Fp>\n\u003Cfigure class=\"my-6\">\u003Cimg src=\"https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1781875102614-0iu8.png\" alt=\"PyPI 開始收 WASM wheel，Pyodide 包裝順多了\" class=\"rounded-xl w-full\" loading=\"lazy\" \u002F>\u003C\u002Ffigure>\n\u003Cp>這個變化\u003Ca href=\"\u002Fnews\u002Fwindsurf-model-router-ide-opinion-june-2026-zh\">不只是\u003C\u002Fa>格式名稱不同。它代表 PyPI 已經把這類工件納入正式分發流程。套件作者不用再找旁路，也不用自己另外架一套下載點。\u003C\u002Fp>\u003Cp>對 Pyodide 來說，這超重要。因為它不是玩具專案，而是一個完整 Python 執行環境。它把 Python、標準函式庫，還有一部分第三方套件搬進瀏覽器。當套件發佈變簡單，能用的東西就會變多。\u003C\u002Fp>\u003Cul>\u003Cli>舊做法：Pyodide 團隊自己建、自己 host、自己審。\u003C\u002Fli>\u003Cli>新做法：套件作者直接上傳 WASM wheel 到 PyPI。\u003C\u002Fli>\u003Cli>好處：少很多人工流程，也少很多維護成本。\u003C\u002Fli>\u003Cli>結果：瀏覽器版 Python 能接到更多第三方套件。\u003C\u002Fli>\u003C\u002Ful>\u003Ch2>Simon Willison 怎麼證明它能用\u003C\u002Fh2>\u003Cp>Willison 不是只講概念。他直接做了一個實驗，叫做 \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fsimonw\u002Fluau-wasm\" target=\"_blank\" rel=\"noopener\">luau-wasm\u003C\u002Fa>，然後把它發佈到 PyPI。這個專案包的是 \u003Ca href=\"https:\u002F\u002Fluau.org\u002F\" target=\"_blank\" rel=\"noopener\">Luau\u003C\u002Fa>，也就是 Roblox 用的那個輕量語言，底層是 C++。\u003C\u002Fp>\u003Cp>他還用了 \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fclaude-code\" target=\"_blank\" rel=\"noopener\">Claude Code\u003C\u002Fa> 跟 \u003Ca href=\"https:\u002F\u002Fopenai.com\u002Findex\u002Fgpt-5-5\u002F\" target=\"_blank\" rel=\"noopener\">GPT-5.5\u003C\u002Fa> 幫忙處理打包和 \u003Ca href=\"\u002Ftag\u002Fgithub\">GitHub\u003C\u002Fa> Actions。這段很有現實感。因為很多套件卡住，根本不是演算法問題，而是建置流程很煩。\u003C\u002Fp>\u003Cp>最後產出的 wheel 只有 276 KB，檔名是 \u003Ccode>luau_wasm-0.1a0-cp314-cp314-pyemscripten_2026_0_wasm32.whl\u003C\u002Fcode>。這數字很\u003Ca href=\"\u002Fnews\u002Fhermes-agent-learning-memory-gateways-zh\">關鍵\u003C\u002Fa>。它代表 browser-ready 的 binary 不一定很肥，很多情況下甚至比你想像中小很多。\u003C\u002Fp>\u003Cblockquote>「往後，套件維護者可以像發佈 Linux、macOS 或 Windows 的 native wheel 一樣，直接發佈 Pyodide wheel 到 PyPI。」\u003C\u002Fblockquote>\u003Cp>這句話講得很直接。意思就是，瀏覽器版 Python 不用再被當成特別分支處理。套件作者只要多做一個 target，就能進到同一套發佈邏輯。\u003C\u002Fp>\u003Cp>他還用了 \u003Ca href=\"https:\u002F\u002Fcibuildwheel.pypa.io\u002Fen\u002Fstable\u002F\" target=\"_blank\" rel=\"noopener\">cibuildwheel\u003C\u002Fa> 和 GitHub Actions 來自動化建置。Demo 則放在 \u003Ca href=\"https:\u002F\u002Fsimonw.github.io\u002Fluau-wasm\u002F\" target=\"_blank\" rel=\"noopener\">simonw.github.io\u002Fluau-wasm\u003C\u002Fa>，直接在瀏覽器載入 Pyodide、安裝套件、執行程式。\u003C\u002Fp>\u003Ch2>28 個套件透露了什麼\u003C\u002Fh2>\u003Cp>Willison 還去查了 PyPI 的公開 BigQuery 資料集，找到 28 個已經用新 WASM 標籤發佈的套件。這不是一個很大的數字，但已經夠看出方向。\u003C\u002Fp>\n\u003Cfigure class=\"my-6\">\u003Cimg src=\"https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1781875100861-zito.png\" alt=\"PyPI 開始收 WASM wheel，Pyodide 包裝順多了\" class=\"rounded-xl w-full\" loading=\"lazy\" \u002F>\u003C\u002Ffigure>\n\u003Cp>名單裡有 \u003Ca href=\"https:\u002F\u002Fpypi.org\u002Fproject\u002Fpydantic_core\u002F\" target=\"_blank\" rel=\"noopener\">pydantic_core\u003C\u002Fa>、\u003Ca href=\"https:\u002F\u002Fpypi.org\u002Fproject\u002Fonnx\u002F\" target=\"_blank\" rel=\"noopener\">onnx\u003C\u002Fa>、\u003Ca href=\"https:\u002F\u002Fpypi.org\u002Fproject\u002Ftypst\u002F\" target=\"_blank\" rel=\"noopener\">typst\u003C\u002Fa>，還有 \u003Ca href=\"https:\u002F\u002Fpypi.org\u002Fproject\u002Fyaml-rs\u002F\" target=\"_blank\" rel=\"noopener\">yaml-rs\u003C\u002Fa>、\u003Ca href=\"https:\u002F\u002Fpypi.org\u002Fproject\u002Ftoml-rs\u002F\" target=\"_blank\" rel=\"noopener\">toml-rs\u003C\u002Fa> 這類 \u003Ca href=\"\u002Ftag\u002Frust\">Rust\u003C\u002Fa>-backed 套件。這些專案有個共通點，就是本來就帶有編譯產物。\u003C\u002Fp>\u003Cp>所以這波最先吃到紅利的，不是純 Python 小工具，而是本來就有 native code 的套件。這很合理。因為這些專案原本就得處理平台差異，現在只是多了一個 WebAssembly 目標。\u003C\u002Fp>\u003Cul>\u003Cli>\u003Ca href=\"https:\u002F\u002Fpypi.org\u002Fproject\u002Fluau-wasm\u002F\" target=\"_blank\" rel=\"noopener\">luau-wasm\u003C\u002Fa>：最新的示範案例。\u003C\u002Fli>\u003Cli>\u003Ca href=\"https:\u002F\u002Fpypi.org\u002Fproject\u002Fpydantic_core\u002F\" target=\"_blank\" rel=\"noopener\">pydantic_core\u003C\u002Fa>：很多 Python 專案都會碰到。\u003C\u002Fli>\u003Cli>\u003Ca href=\"https:\u002F\u002Fpypi.org\u002Fproject\u002Fonnx\u002F\" target=\"_blank\" rel=\"noopener\">onnx\u003C\u002Fa>：機器學習工具鏈常見元件。\u003C\u002Fli>\u003Cli>\u003Ca href=\"https:\u002F\u002Fpypi.org\u002Fproject\u002Ftypst\u002F\" target=\"_blank\" rel=\"noopener\">typst\u003C\u002Fa>：編譯型工具很適合這種分發方式。\u003C\u002Fli>\u003C\u002Ful>\u003Cp>如果你在做瀏覽器端 Python App，這個數字的意義很直接。你開始可以想像，依賴套件不必再靠一堆客製化下載點，而是回到 PyPI 這個大家熟悉的入口。\u003C\u002Fp>\u003Ch2>跟舊流程比，差在哪裡\u003C\u002Fh2>\u003Cp>以前 Pyodide 團隊要自己扛很多事。他們得建置、託管、審查超過 300 個套件。這種工作很像幫整個生態系當代工廠，久了誰都會累。\u003C\u002Fp>\u003Cp>新流程比較像正常軟體發佈。套件作者自己產出 WASM wheel，再交給 PyPI。Pyodide 只要在執行期安裝就好，不用每個套件都額外跑一輪人工流程。\u003C\u002Fp>\u003Cp>這裡的差異不是「比較方便」而已。它直接影響誰願意維護、誰願意發版、誰願意把套件做成可在瀏覽器跑的版本。流程越怪，參與的人就越少。\u003C\u002Fp>\u003Cul>\u003Cli>舊流程：Pyodide 團隊是瓶頸。\u003C\u002Fli>\u003Cli>新流程：套件作者自己負責發佈。\u003C\u002Fli>\u003Cli>舊流程：每個套件都像特殊案件。\u003C\u002Fli>\u003Cli>新流程：WASM wheel 變成一般發佈選項。\u003C\u002Fli>\u003C\u002Ful>\u003Cp>如果你有做過 CI\u002FCD，就知道這差很多。當流程能自動化，團隊才有空去處理真正難的問題。像是相容性、效能、記憶體占用，這些才是該花時間的地方。\u003C\u002Fp>\u003Ch2>這跟整個 Python 生態有什麼關係\u003C\u002Fh2>\u003Cp>PyPI 是 Python 世界的中心入口。它不是單純的下載站，而是很多工具鏈、建置流程、依賴管理的共同地基。當它開始接受 WASM wheel，等於把瀏覽器端 Python 也拉進這個中心化流程。\u003C\u002Fp>\u003Cp>這對開發者很實際。你不用再為 Pyodide 準備一套完全不同的包裝邏輯。對團隊來說，這種一致性很重要，因為它會直接影響維運成本。\u003C\u002Fp>\u003Cp>從產業角度看，這也會讓更多工具願意嘗試 browser runtime。像資料處理、教學、互動筆記本、前端原型，這些場景本來就適合在瀏覽器跑。現在少了包裝障礙，試錯成本也低一些。\u003C\u002Fp>\u003Cp>我覺得最\u003Ca href=\"\u002Fnews\u002Fclaude-200-dollar-plan-not-worth-trusting-zh\">值得\u003C\u002Fa>觀察的，不是這次支援本身，而是後面會有多少套件跟進。28 個還不多，但如果接下來變成 100、200，整個使用體驗就會差很多。\u003C\u002Fp>\u003Cp>接下來幾個月，最值得看的指標很簡單：有多少熱門套件開始出 WASM wheel、有多少專案把 Pyodide 當正式 target。你如果有在維護 Python 套件，現在就該想一下自己的 build pipeline 能不能多長出一個 WebAssembly 目標。\u003C\u002Fp>\u003Cp>講白了，這次不是新聞稿等級的熱鬧，而是基礎設施真的補了一塊。補得不花俏，但很有用。\u003C\u002Fp>","PyPI 已支援 Pyodide 可用的 WASM wheel，讓套件作者能直接上傳瀏覽器版 Python 二進位檔，減少 Pyodide 團隊手動維護 300 多個套件的負擔。","simonwillison.net","https:\u002F\u002Fsimonwillison.net\u002F2026\u002FJun\u002F13\u002Fpublishing-wasm-wheels\u002F",null,"https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1781875102614-0iu8.png","tools","zh","6138a501-502b-471f-87c7-0adae7d12cfd",[17,18,19,20,21,22],"PyPI","Pyodide","WASM wheel","WebAssembly","Python 套件發佈","瀏覽器 Python",[24,25,26],"PyPI 已能接受 Pyodide 可用的 WASM wheel，套件作者可走正常發佈流程。","Pyodide 團隊原本要手動維護 300+ 套件，現在壓力可以往外分散。","目前已有 28 個套件使用新標籤，代表這條路已經開始有人採用。",0,"2026-06-19T13:17:56.091729+00:00","2026-06-19T13:17:56.068+00:00","2ea9758d-db0a-477e-95cd-510542c5f86f",{"tags":32,"relatedLang":35,"relatedPosts":39},[33],{"name":20,"slug":34},"webassembly",{"id":15,"slug":36,"title":37,"language":38},"pypi-wasm-wheels-pyodide-en","PyPI now accepts WASM wheels for Pyodide","en",[40,46,52,58,64,70],{"id":41,"slug":42,"title":43,"cover_image":44,"image_url":44,"created_at":45,"category":13},"45ae2326-cf6b-4164-883b-f33e48428502","windsurf-model-router-ide-opinion-june-2026-zh","Windsurf 正在變成模型路由器，而不只是 IDE","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1781871473044-8win.png","2026-06-19T12:17:22.381+00:00",{"id":47,"slug":48,"title":49,"cover_image":50,"image_url":50,"created_at":51,"category":13},"d2a143b9-efa1-4ffd-adcb-7a315ae6344e","renesas-acquires-altium-pcb-design-tool-update-zh","瑞萨全资收购 Altium，PCB 教程更新","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1781859766720-ow6s.png","2026-06-19T09:02:23.113145+00:00",{"id":53,"slug":54,"title":55,"cover_image":56,"image_url":56,"created_at":57,"category":13},"1e47b8fc-1eab-4342-83bd-a270d59a41f9","rust-forum-week-25-turns-ideas-into-shipping-work-zh","Rust 論壇週報把想法變交付","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1781857111111-md5g.png","2026-06-19T08:18:04.893117+00:00",{"id":59,"slug":60,"title":61,"cover_image":62,"image_url":62,"created_at":63,"category":13},"300d082a-4df5-4a26-8b5b-7dff73dd0da3","claude-code-rust-native-terminal-interface-zh","Claude Code Rust 把終端機變輕了","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1781854439295-lkeg.png","2026-06-19T07:33:29.722095+00:00",{"id":65,"slug":66,"title":67,"cover_image":68,"image_url":68,"created_at":69,"category":13},"819930d2-f83c-42e1-be18-fc65eb212184","open-source-tools-vibe-coding-cybersecurity-zh","開源工具把 vibe coding 變安全","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1781852614083-gnj4.png","2026-06-19T07:03:08.602553+00:00",{"id":71,"slug":72,"title":73,"cover_image":74,"image_url":74,"created_at":75,"category":13},"60a23c5e-d9df-4186-a30e-5d2c123a0ed6","model-triage-coding-tests-cost-win-zh","模型分流把測試成本壓下來","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1781840895287-vp1r.png","2026-06-19T03:47:51.801299+00:00",[77,82,87,92,97,102,107,112,117,122],{"id":78,"slug":79,"title":80,"created_at":81},"855cd52f-6fab-46cc-a7c1-42195e8a0de4","surepath-real-time-mcp-policy-controls-zh","SurePath 推出即時 MCP 政策控管","2026-03-26T07:57:40.77233+00:00",{"id":83,"slug":84,"title":85,"created_at":86},"9b19ab54-edef-4dbd-9ce4-a51e4bae4ebb","mcp-in-2026-the-ai-tool-layer-teams-use-zh","2026 年 MCP：團隊真的在用的 AI 工具層","2026-03-26T08:01:46.589694+00:00",{"id":88,"slug":89,"title":90,"created_at":91},"af9c46c3-7a28-410b-9f04-32b3de30a68c","prompting-in-2026-what-actually-works-zh","2026 提示工程，真正有用的是什麼","2026-03-26T08:08:12.453028+00:00",{"id":93,"slug":94,"title":95,"created_at":96},"05553086-6ed0-4758-81fd-6cab24b575e0","garry-tan-open-sources-claude-code-toolkit-zh","Garry Tan 開源 Claude Code 工具包","2026-03-26T08:26:20.068737+00:00",{"id":98,"slug":99,"title":100,"created_at":101},"042a73a2-18a2-433d-9e8f-9802b9559aac","github-ai-projects-to-watch-in-2026-zh","2026 必看 20 個 GitHub AI 專案","2026-03-26T08:28:09.619964+00:00",{"id":103,"slug":104,"title":105,"created_at":106},"a5f94120-ac0d-4483-9a8b-63590071ac6a","claude-code-vs-cursor-2026-zh","Claude Code 與 Cursor 深度對比：202…","2026-03-26T13:27:14.279193+00:00",{"id":108,"slug":109,"title":110,"created_at":111},"0975afa1-e0c7-4130-a20d-d890eaed995e","practical-github-guide-learning-ml-2026-zh","2026 機器學習入門 GitHub 實用指南","2026-03-27T01:16:49.712576+00:00",{"id":113,"slug":114,"title":115,"created_at":116},"bfdb467a-290f-4a80-b3a9-6f081afb6dff","aiml-2026-student-ai-ml-lab-repo-review-zh","AIML-2026：像課綱的學生實驗 Repo","2026-03-27T01:21:51.467798+00:00",{"id":118,"slug":119,"title":120,"created_at":121},"80cabc3e-09fc-4ff5-8f07-b8d68f5ae545","ai-trending-github-repos-and-research-feeds-zh","AI Trending：把 AI 資源收成一張表","2026-03-27T01:31:35.262183+00:00",{"id":123,"slug":124,"title":125,"created_at":126},"3ce6e6e2-bac5-463e-9f8d-45caabcc61f7","awesome-ai-for-science-research-tools-map-zh","AI 科研工具清單，開始像地圖了","2026-03-27T01:46:50.521945+00:00"]