WASM wheels ya se pueden publicar en PyPI para Pyodide
Pyodide 314.0 permite a cualquier mantenedor distribuir paquetes Python compilados a WebAssembly directamente en PyPI, eliminando el cuello de botella del mantenimiento centralizado.
15 de junio de 2026 · 3 min de lectura
¿Qué ha ocurrido?
El 13 de junio de 2026, Simon Willison documentó en su blog un hito largamente esperado: la publicación de paquetes Python compilados a WebAssembly (WASM) como wheels en PyPI, compatibles con el runtime Pyodide. Esto fue posible gracias al PR #19804 en el repositorio de PyPI, fusionado el 21 de abril de 2026, y al anuncio de Pyodide 314.0.
Anteriormente, los mantenedores de Pyodide tenían que compilar, alojar y mantener más de 300 paquetes ellos mismos, lo que suponía una carga significativa y un cuello de botella para la comunidad. Ahora, cualquier desarrollador puede compilar su paquete a WASM usando cibuildwheel y subirlo a PyPI como un wheel con la plataforma pyemscripten_2026_0_wasm32, definida en PEP 783.
¿Por qué es importante?
Pyodide es un intérprete de Python compilado a WebAssembly que se ejecuta en el navegador. Hasta ahora, los paquetes con extensiones nativas (C, C++, Rust) eran difíciles de distribuir: no existía un mecanismo estándar para subirlos a PyPI y que Pyodide los instalara en tiempo de ejecución. Esto limitaba severamente el ecosistema de Python en el navegador, obligando a los usuarios a depender de un conjunto reducido de paquetes mantenidos centralizadamente.
Con esta novedad, el flujo de trabajo se iguala al de los paquetes nativos para Linux, macOS o Windows: el mantenedor compila el wheel para la plataforma WASM y lo publica en PyPI. Los usuarios de Pyodide pueden instalar estos paquetes con micropip.install('nombre-paquete') de forma transparente.
Ejemplo práctico: luau-wasm
Simon Willison creó un paquete de ejemplo, luau-wasm, que envuelve el lenguaje Luau (un dialecto de Lua con tipos graduales, desarrollado por Roblox) compilado a WASM. El wheel pesa solo 276 KB y se puede usar en el REPL de Pyodide con unas pocas líneas de código:
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
'''))El código fuente y los scripts de construcción están disponibles en GitHub, demostrando lo sencillo que es replicar el proceso.
Consecuencias para el ecosistema
- Descentralización del mantenimiento: Los mantenedores de paquetes populares (NumPy, Pandas, etc.) podrán publicar versiones WASM sin esperar a que Pyodide las incluya. Esto acelerará la disponibilidad de bibliotecas científicas en el navegador.
- Mayor adopción de Pyodide: Al eliminar la fricción de distribución, más desarrolladores considerarán Pyodide como plataforma para aplicaciones web que requieren lógica Python del lado del cliente.
- Estandarización: PEP 783 define la plataforma PyEmscripten, lo que garantiza compatibilidad entre diferentes runtimes WASM de Python, no solo Pyodide.
- Nuevos casos de uso: Aplicaciones educativas, herramientas de visualización de datos interactivas, portátiles Jupyter en el navegador y juegos podrán beneficiarse de paquetes nativos compilados a WASM.
¿Qué deben saber los lectores?
Si eres mantenedor de un paquete Python con extensiones nativas, ya puedes añadir soporte para WASM usando cibuildwheel y configurando tu CI para compilar para la plataforma pyemscripten_2026_0_wasm32. La documentación de Pyodide y el ejemplo de luau-wasm son buenos puntos de partida.
Si eres usuario de Pyodide, pronto podrás instalar muchos más paquetes directamente desde PyPI sin necesidad de builds personalizados. Solo asegúrate de usar Pyodide 314.0 o superior.
"Moving forward, package maintainers can simply build and publish Pyodide wheels to PyPI, just as they do for native wheels on Linux, macOS, or Windows." — Anuncio de Pyodide 314.0
Limitaciones y consideraciones
Aunque es un gran avance, no todos los paquetes se beneficiarán de inmediato. Las extensiones que dependen de bibliotecas del sistema (como OpenGL o librerías de red) pueden no ser compatibles con WASM. Además, el rendimiento en el navegador sigue estando limitado por el sandbox de WASM, aunque para muchos casos de uso es suficiente.
El proceso de compilación cruzada puede ser complejo para paquetes con dependencias nativas profundas, pero herramientas como cibuildwheel y Emscripten simplifican la tarea.
Conclusión
La publicación de wheels WASM en PyPI marca un antes y un después para Python en el navegador. Al igual que la adopción de muchos wheels simplificó la instalación de paquetes en escritorio, esta estandarización hará lo propio en el ecosistema web. Pyodide deja de ser un proyecto de nicho y se consolida como una plataforma viable para ejecutar Python del lado del cliente, con un camino claro para que cualquier paquete esté disponible.
Puntos clave
- Pyodide 314.0 habilita la publicación de wheels WASM en PyPI, siguiendo PEP 783.
- Los mantenedores pueden compilar sus paquetes con cibuildwheel y subirlos como cualquier wheel nativo.
- El cuello de botella del mantenimiento centralizado de más de 300 paquetes desaparece.
- Ejemplo: luau-wasm, un paquete de 276 KB que ejecuta Luau en el navegador vía Pyodide.
- Se espera una adopción masiva de bibliotecas científicas y de uso general en el ecosistema Pyodide.
Preguntas frecuentes
¿Qué es Pyodide?
Pyodide es un intérprete de Python compilado a WebAssembly que se ejecuta en el navegador, permitiendo ejecutar código Python del lado del cliente.
¿Qué cambia con Pyodide 314.0?
Ahora los mantenedores pueden publicar wheels compilados a WASM directamente en PyPI, en lugar de depender de que el equipo de Pyodide los mantenga centralizadamente.
¿Cómo puedo instalar un paquete WASM en Pyodide?
Usa micropip.install('nombre-paquete') en el entorno Pyodide. El paquete debe tener un wheel con la plataforma pyemscripten_2026_0_wasm32.
¿Qué es PEP 783?
Define la plataforma PyEmscripten para wheels WASM, garantizando compatibilidad entre runtimes Python en WebAssembly.
¿Qué herramientas necesito para compilar un paquete WASM?
Puedes usar cibuildwheel con Emscripten para compilar extensiones C/C++/Rust a WASM y generar el wheel adecuado.
Fuentes utilizadas
Sigue leyendo
Comentarios
Sé el primero en comentar.