将 WASM wheels 发布到 PyPI 以供 Pyodide 使用Publishing WASM wheels to PyPI for use with Pyodide
Pyodide 314.0 版本宣布支持将针对 Pyodide(或兼容 PEP 783 中定义的 PyEmscripten 平台的 Python 运行时)构建的包直接发布到 PyPI。开发者现在可以直接从 PyPI 安装这些 WebAssembly (WASM) wheels,大幅简化了在浏览器环境中分发和部署 Python WASM 模块的过程。这一更新标志着 Python 生态在 WebAssembly 集成方面迈出了关键一步。
Simon Willison
2026年6月13日
Pyodide 314.0 的发布公告(来自 Hacker News)包含了我期待已久的消息:
你现在可以将为 Pyodide(或任何兼容 PEP 783 中定义的 PyEmscripten 平台的 Python 运行时)构建的 Python 包直接发布到 PyPI,并在运行时安装它们。 以前,Pyodide 维护者必须亲自维护、构建和托管 300 多个包。这给我们的维护者带来了沉重的负担,并成为了社区的一个主要瓶颈,因为每个新包都需要人工审查。 今后,包维护者只需构建 Pyodide wheels 并将其发布到 PyPI 即可,就像他们在 Linux、macOS 或 Windows 上发布原生 wheels 一样。
这是支持此功能的 PyPI 官方 PR,已于 4 月 21 日合并。
我非常喜欢 Pyodide,但过去一直对这个限制感到沮丧。我们可以将 C 或 Rust 扩展编译到 wheel 文件中的 WASM,但在此之前,没有简单的方法来分发它们。
多亏了许多人的努力,这个问题现在已经解决了!
使用 luau-wasm 进行尝试
我决定找点东西打包来庆祝一下。我手头有不少实验性的 Pyodide 项目,但最合适的似乎是我 3 月 9 日做的 Luau WebAssembly 探索性研究。
Luau 是一种“小巧、快速且可嵌入的编程语言,基于 Lua 并带有渐进式类型系统”,由 Roblox 开发,并在 MIT 许可证下发布。
它是用 C++ 编写的。我已经知道可以将其编译为 WebAssembly 并在 Pyodide 内部运行,因此我给 Codex + GPT-5.5 xhigh 下达了任务,让它打包我的实验,并使用 GitHub Actions 将其发布到 PyPI。
经过几次迭代,结果如下:luau-wasm 是一个全新的 PyPI 包,它发布了一个 276KB 的 luau_wasm-0.1a0-cp314-cp314-pyemscripten_2026_0_wasm32.whl 文件,你可以像这样在 Pyodide 中使用它:
import micropip
await micropip.install("luau-wasm")
import luau_wasm
print(luau_wasm.execute(r'''
local animals = {"fox", "owl", "frog", "rabbit"}
table.sort(animals, function(a, b) return #a < #b end)
for i, name in animals do print(i .. ". " .. name .. " (" .. #name .. ")") end
'''))你可以在 Pyodide REPL 演示中运行该代码以查看其实际效果。
luau-wasm 的 GitHub 仓库包含所有的构建和部署脚本(使用最新的 cibuildwheel),并部署了一个 HTML 演示页面,该页面会加载 Pyodide,安装 luau-wasm 并提供了一个用于尝试的界面:https://simonw.github.io/luau-wasm/
目前有多少个包在使用这个功能?
我很好奇目前有多少包在为这个平台发布 wheels。
在用 ChatGPT 调整了一番之后,我得到了这段 BigQuery SQL,并在 BigQuery 上针对 PyPI 的公共数据集运行了它。这是查询结果的原始 JSON 文件,这是在 Datasette Lite 中的 SQLite SQL 查询,它通过最新上传日期对包进行了去重。
如果查询无误的话,目前有 28 个 PyPI 包正在使用新的 pyemscripten_202*_wasm32 标签发布:
luau-wasm, uuid7-rs, cmm-16bit, pyOpenTTDAdmin, imgui-bundle, numbertoolkit, bashkit, geoarrow-rust-core, arro3-io, arro3-core, arro3-compute, onnx, powerfit-em, tcod, chonkie-core, tokie, robotraconteur, pydantic_core, yaml-rs, cadquery-ocp-novtk-OCP.wasm, uuid_utils, base64_utils, pycdfpp, lib3mf-OCP.wasm, typst, toml-rs, onnx-weekly, dummy-pyodide-ext-test
希望在未来的几个月和几年里,我们能看到更多这样的包出现。
需要完整排版与评论请前往来源站点阅读。