본문으로 건너뛰기

© 2026 Molayo

RSS헤드라인2026. 06. 15. 11:47

Pyodide에서 사용할 수 있도록 PyPI에 WASM wheels 게시하기

요약

Pyodide 사용자가 PyPI를 통해 WASM wheels를 직접 게시하고 런타임에 설치할 수 있게 되었습니다. 이를 통해 패키지 유지 관리자의 부담이 줄어들고 커뮤니티의 패키지 생태계가 확장될 전망입니다.

핵심 포인트

  • PyPI에 WASM wheels 직접 게시 및 설치 가능
  • PEP 783(PyEmscripten) 호환 플랫폼 지원
  • 패키지 유지 관리자의 수동 빌드 및 호스팅 부담 해소
  • luau-wasm 패키지를 통한 실제 작동 사례 확인

Pyodide에서 사용할 수 있도록 PyPI에 WASM wheels 게시하기

2026년 6월 13일

Pyodide 314.0 릴리스 공지(Hacker News를 통해)에는 제가 오랫동안 기다려온 소식이 포함되어 있습니다:

이제 Pyodide용(또는 PEP 783에 정의된 PyEmscripten 플랫폼과 호환되는 모든 Python 런타임용)으로 빌드된 Python 패키지를 PyPI에 직접 게시하고 런타임에 설치할 수 있습니다.

이전에는 Pyodide 유지 관리자들이 300개 이상의 패키지를 직접 유지 관리, 빌드 및 호스팅해야 했습니다. 이는 유지 관리자들에게 상당한 부담을 주었으며, 새로운 패키지가 나올 때마다 수동 검토가 필요했기 때문에 커뮤니티의 주요 병목 현상이 되었습니다.

앞으로는 패키지 유지 관리자들이 Linux, macOS 또는 Windows용 네이티브 wheel(wheels)을 하는 것과 마찬가지로, 단순히 Pyodide wheel(wheels)을 빌드하여 PyPI에 게시할 수 있습니다.

이 기능을 지원하기 위해 4월 21일에 반영된 PyPI 자체에 대한 PR(Pull Request)은 다음과 같습니다.

저는 Pyodide를 매우 좋아하며, 과거에 이러한 제한 사항 때문에 답답함을 느꼈습니다. C 또는 Rust 확장을 wheel(wheels) 파일 내의 WASM으로 컴파일하는 것은 가능하지만, 이전에는 이를 배포할 쉬운 방법이 없었습니다.

많은 사람의 노력 덕분에 이제 이 문제가 해결되었습니다!

luau-wasm으로 테스트해 보기

저는 패키징할 수 있는 것을 찾아보며 이 소식을 축하하기로 했습니다. 주변에 실험적인 Pyodide 프로젝트가 꽤 많이 있지만, 이번에 가장 적합해 보이는 것은 3월 9일에 진행했던 저의 Luau WebAssembly 연구 스파이크(spike)였습니다.

Luau는 Roblox에서 개발하여 MIT 라이선스로 출시한 "점진적 타입 시스템(gradual type system)을 갖춘 Lua 기반의 작고 빠르며 임베디드 가능한 프로그래밍 언어"입니다.

이 언어는 C++로 작성되었습니다. 저는 이미 이를 WebAssembly로 컴파일하여 Pyodide 내부에서 실행하는 것이 가능하다는 것을 알고 있었기에, Codex + GPT-5.5 xhigh에게 저의 실험 결과물을 패키징하여 GitHub Actions를 사용하여 PyPI에 게시하는 작업을 맡겼습니다.

몇 번의 반복 작업이 필요했지만, 결과는 다음과 같습니다: luau-wasm은 276KB 크기의 luau_wasm-0.1a0-cp314-cp314-pyemscripten_2026_0_wasm32.whl 파일을 게시하는 완전히 새로운 PyPI 패키지이며, 다음과 같이 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 사용)가 포함되어 있으며, Pyodide를 로드하고 luau-wasm을 설치한 뒤 직접 체험해 볼 수 있는 인터페이스를 제공하는 HTML 데모 페이지도 배포되어 있습니다: https://simonw.github.io/luau-wasm/

Screenshot of a web app titled "Luau WASM" with subtitle "Run Luau in the browser through Pyodide after installing the luau-wasm WebAssembly wheel from PyPI." A green "Ready" status badge is at top right. Below are example buttons: "Hello World", "Variables", "Tables", "Fibonacci", "Runtime Error". A "LUAU SOURCE" code editor contains: local function fib(n: number): number / if n < 2 then return n end / return fib(n - 1) + fib(n - 2) / end / local out = {} / for i = 0, 12 do / table.insert(out, tostring(fib(i))) / end / print(table.concat(out, ", ")). On the right is an "OUTPUT" panel with a "Copy" button showing dark terminal output: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144. At the bottom left are a blue "Run" button, a "Clear" button, and the text "6.0 ms".

현재까지 얼마나 많은 패키지가 이를 사용하고 있을까요?

현재 얼마나 많은 패키지가 이 플랫폼을 위해 휠(wheels)을 게시하고 있는지 궁금했습니다.

ChatGPT를 활용해 몇 가지 시도를 해본 끝에, BigQuery에 있는 PyPI 공개 데이터셋을 대상으로 실행할 수 있는 BigQuery SQL을 작성했습니다. 다음은 쿼리 결과의 원본 JSON이며, 가장 최근 업로드 날짜를 기준으로 패키지의 중복을 제거한 Datasette Lite의 SQLite SQL 쿼리입니다.

쿼리가 정확하다면, 현재 새로운 pyemscripten_20*_wasm32 태그를 사용하여 게시 중인 PyPI 패키지는 다음과 같이 28개입니다:

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

앞으로 몇 달, 몇 년에 걸쳐 이러한 패키지들이 훨씬 더 많이 등장하기를 기대합니다.

AI 자동 생성 콘텐츠

본 콘텐츠는 RSS: Simon Willison's Weblog의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.

원문 바로가기
0

댓글

0