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, что упрощает планирование обновлений веб‑приложений.