Simon Willison's Weblog

Publishing WASM wheels to PyPI for use with Pyodide

8.5内容质量
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。

结构提纲

按章节快速跳转。

  1. Pyodide 314.0 版本支持将 WASM 轮子发布到 PyPI,极大简化了 WebAssembly 包的分发。

  2. Pyodide 314.0 版本允许用户将为 Pyodide 构建的包直接发布到 PyPI。

  3. Pyodide 维护者不再需要手动维护 300 多个包,减轻了维护负担。

  4. 作者尝试将 Luau 编译为 WebAssembly 并发布到 PyPI,成功创建了 luau-wasm 包。

  5. luau-wasm 可以通过 micropip 安装,并在 Pyodide 中运行 Lua 代码。

  6. 作者使用 BigQuery 查询 PyPI 数据集,统计当前使用该功能的包数量。

思维导图

用一张图看清主题之间的关系。

查看大纲文本(无障碍 / 无 JS 友好)
  • Pyodide 314.0 的新特性
    • 支持发布 WASM 轮子到 PyPI
      • 减轻维护者负担
      • 用户可直接安装 PyPI 包
    • 尝试使用 luau-wasm
      • 使用 micropip 安装
      • 运行 Lua 代码示例

金句 / Highlights

值得收藏与分享的关键句。

#Pyodide#WASM#PyPI#Python
打开原文

将 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 中这样使用:

code
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

Twitter

订阅我的电子报

更近的文章

  • 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