Перейти к содержанию
Автор: LUMD

Pyodide 314.0: публикация WebAssembly‑колёс в PyPI и новые стандарты

В релизе Pyodide 314.0 приняты PEP 783 и новая схема версий, позволяющие выкладывать WebAssembly‑колёса в PyPI и упрощающие работу с пакетами в браузере.

Мы объявляем о выходе Pyodide 314.0 – первой версии, полностью поддерживающей PEP 783. Это открывает возможность публиковать WebAssembly‑колёса для Pyodide (и любых совместимых сред) прямо в PyPI, снимая нагрузку с команды проекта.

Как работает публикация PyEmscripten‑колёс?

С помощью новых тегов pyemscripten_2025_0 (Python 3.13) и pyemscripten_2026_0 (Python 3.14) разработчики собирают колёса обычным cibuildwheel. Начиная с версии 4.0 инструмент уже умеет создавать артефакты для указанных ABI. После сборки пакет публикуется в PyPI и устанавливается в браузере через loadPyodide() так же, как нативные колёса для Linux, macOS или Windows.

Что изменилось в схеме версий Pyodide?

Раньше релизы шли 0.29, 0.30 и т.д. Теперь номер версии привязан к версии Python: Pyodide 314.x соответствует Python 3.14, а 0.29.x – Python 3.13. Бинарно несовместимые изменения появятся только при обновлении основной версии Python, обычно раз в год. Это значит, что колёса, собранные для конкретной версии Python, будут работать в нескольких последующих релизах Pyodide.

Какие изменения в стандартной библиотеке?

Библиотеки ssl, sqlite3 и lzma, ранее вынесенные из дистрибутива, возвращены в стандартную библиотеку, что упрощает их использование, хотя размер загрузки вырос. Пакеты pydecimal и test удалены, а параметр fullstdlib в loadPyodide() более не влияет.

Новые возможности JavaScript‑интеропа

  • JsBigInt – тип, сохраняющий точность больших целых чисел при передаче между JS и Python.
  • Поддержка using/[Symbol.dispose] позволяет автоматически освобождать ресурсы Python‑объектов из JavaScript.
  • Любой итерируемый объект с length теперь ведёт себя как массив в JsProxy, включая срезы.

Экспериментальная поддержка сокетов в Node.js

Выпуск добавил возможность использовать модуль socket в среде Node.js, открывая TCP‑соединения, в том числе с TLS. Включить её можно вызовом await pyodide.useNodeSockFS(). Для Node ≤ v24 требуется флаг --experimental-wasm-stack-switching.

Pyodide как ES‑модуль

Файл pyodide.asm.js переименован в pyodide.asm.mjs. loadPyodide() автоматически подхватывает новое имя, но при прямом импорте необходимо менять пути и использовать модульные воркеры.

Что это значит для бизнеса

Разработчики теперь могут выкладывать готовые колёса в PyPI без участия команды Pyodide, ускоряя выпуск новых функций и снижая затраты на поддержку. Пользователи получают более стабильные пакеты, совместимые с конкретной версией Python, что упрощает планирование обновлений веб‑приложений.