Simon Willison · 博客

向PyPI发布WASM wheels以用于Pyodide

Publishing WASM wheels to PyPI for use with Pyodide

二〇二六年六月十四日 · 英文原文

Pyodide 314.0 发布,支持将符合 PEP 783 的 Python 包直接发布到 PyPI 并在运行时安装,此前维护者需自行构建托管超 300 个包。PyPI 相关 PR 已于 4 月 21 日合并。开发者 Simon Willison 打包了 Roblox 开发的 Luau 语言为 luau-wasm 包(276KB),通过 GitHub Actions 发布至 PyPI。目前已有 28 个包使用新 `pyemscripten_202*_wasm32` 标签发布,包括 uuid7-rs、imgui-bundle、onnx 等。

Pyodide 314.0 发布公告

Pyodide 314.0 发布公告(via Hacker News)包含了我期待已久的消息:你现在可以将为 Pyodide(或任何兼容 PEP 783 定义的 PyEmscripten 平台的 Python 运行时)构建的 Python 包直接发布到 PyPI,并在运行时安装。此前,Pyodide 维护者必须自行维护、构建和托管超过 300 个包。这给我们的维护者带来了巨大负担,并成为社区的主要瓶颈,因为每个新包都需要人工审核。今后,包维护者可以像为 Linux、macOS 或 Windows 构建原生 wheel 一样,直接将 Pyodide wheel 构建并发布到 PyPI。这是支持此功能的 PyPI 本身的 PR,已于 4 月 21 日合并。我非常喜欢 Pyodide,过去一直受限于此功能而感到沮丧。虽然可以在 wheel 文件中将 C 或 Rust 扩展编译为 WASM,但此前没有简便的分发方式。感谢许多人的努力,这个问题现在终于解决了!

用 luau-wasm 进行尝试

我决定通过打包一些东西来庆祝。我手头有不少实验性的 Pyodide 项目,但最合适的似乎是 3 月 9 日做的 Luau WebAssembly 研究 spike。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 ipairs(animals) do
  print(i .. ". " .. name .. " (" .. #name .. ")")
end
'''))

你可以在 Pyodide REPL 演示中运行这段代码来查看效果。luau-wasm 的 GitHub 仓库包含所有构建和部署脚本(使用最新的 cibuildwheel),还部署了一个 HTML 演示页面,该页面加载 Pyodide、安装 luau-wasm 并提供试用界面:https://simonw.github.io/luau-wasm/

目前有多少包在使用这个功能?

我很好奇目前有多少包在为此平台发布 wheel。经过与 ChatGPT 的一些调试,我得到了这个 BigQuery SQL 查询,并在 PyPI 的 BigQuery 公共数据集上运行。这是查询结果的原始 JSON,这是 Datasette Lite 中的 SQLite SQL 查询,用于按最近上传日期去重包。如果查询正确,目前有 28 个 PyPI 包使用新的 pyemscripten_202*_wasm32 标签发布:

希望在未来的几个月和几年里,我们能看到更多这样的包出现。

标签:lua, pypi, python, sandboxing, webassembly, github-actions, pyodide

译自 Simon Willison · 博客 · 录于 二〇二六年六月十四日