Publishing WASM wheels to PyPI for use with Pyodide

TL;DR · AI 摘要
Pyodide 现在支持将 WASM 轮子发布到 PyPI,极大简化了 WebAssembly 包的分发。
核心要点
- Pyodide 314.0 版本支持将 WASM 轮子发布到 PyPI。
- Pyodide 维护者不再需要手动维护 300 多个包。
- luau-wasm 是一个新发布的 PyPI 包,大小为 276KB。
结构提纲
按章节快速跳转。
思维导图
用一张图看清主题之间的关系。
查看大纲文本(无障碍 / 无 JS 友好)
- Pyodide 314.0 的新特性
- 支持发布 WASM 轮子到 PyPI
- 减轻维护者负担
- 用户可直接安装 PyPI 包
- 尝试使用 luau-wasm
- 使用 micropip 安装
- 运行 Lua 代码示例
金句 / Highlights
值得收藏与分享的关键句。
Pyodide 314.0 版本允许用户将为 Pyodide 构建的包直接发布到 PyPI。
Pyodide 维护者不再需要手动维护 300 多个包,减轻了维护负担。
luau-wasm 是一个新发布的 PyPI 包,大小为 276KB。
将 WASM wheels 发布到 PyPI 以供 Pyodide 使用
Simon Willison 的博客
订阅
#smallhead
由以下公司赞助:
Teleport
— 防止访问瓶颈。统一身份。Teleport 用一个安全团队信任、工程师愿意使用的单一身份层,取代了碎片化的身份和访问工具。
将 WASM wheels 发布到 PyPI 以供 Pyodide 使用
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 扩展编译为 WASM 并包含在 wheel 文件中,但在此之前没有一种简便的方式可以分发它们。
得益于许多人的努力,这一问题现在已经得到了解决!
#### 使用 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,我将其运行在 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
希望在接下来的几个月甚至几年里,能看到越来越多的项目出现。
发布于
晚上 11:55 · 关注我在
Mastodon
,
Bluesky
或
订阅我的电子报
更近的文章
- Claude Fable 始终积极进取 - 2026 年 6 月 11 日
- 对 Claude Fable 5 的初步印象 - 2026 年 6 月 9 日
#primary
这是 Simon Willison 于 2026 年 6 月 13 日发布的文章,内容是将 WASM 轮子发布到 PyPI 以供 Pyodide 使用。
lua
14
pypi
47
python
1,261
sandboxing
webassembly
126
github-actions
66
pyodide
29
上一篇:Claude Fable 始终积极进取
月度简报
每月赞助我 10 美元,即可获得本月最重要的 LLM 发展精选电子邮件摘要。
让我少发点邮件!
赞助并订阅
#secondary
#wrapper
- 披露
- 附录
- ©
- 2002
- 2003
- 2004
- 2005
- 2006
- 2007
- 2008
- 2009
- 2010
- 2011
- 2012
- 2013
- 2014
- 2015
- 2016
- 2017
- 2018
- 2019
- 2020
- 2021
- 2022
- 2023
- 2024
- 2025
- 2026