← На главную

Pyodide 314.0: публикуй пакеты на PyPI и пользуйся ssl, sqlite3, lzma

09.06.2026 15:54 · hackernews

Вышел Pyodide 314.0 — крупный релиз платформы для запуска Python в браузере. Главное событие: наконец-то принят PEP 783 (Emscripten packaging), над которым создатель ядра Pyodide Hood Chatham работал очень долго. Это меняет всё: теперь можно публиковать пакеты, собранные для Pyodide, прямо на PyPI и устанавливать их на лету. Раньше команда мейнтейнеров вручную собирала и хостила больше 300 пакетов — это было узким местом. Теперь любой поддерживающий пакет может сам собрать wheel и выложить, как делает для Linux, macOS или Windows. cibuildwheel v4.0 уже умеет собирать под PyEmscripten 2025 и 2026 ABI (второй пока как пререлиз, через pyodide-prerelease — но скоро и он станет стабильным в v4.1.0). Из-за PEP 783 платформенные теги теперь начинаются с pyemscripten_*.

Поменялась и схема версий. Раньше была 0.29, а теперь сразу 314.0 — привязка к версии Python. Pyodide 314.x соответствует Python 3.14. Бинарно-несовместимые изменения будут только при апдейте самого Python (примерно раз в год). В релизе идёт Python 3.14.2 и Emscripten 5.0.3.

Прошлись по стандартной библиотеке. Раньше ssl, sqlite3 и lzma были вынесены из неё, чтобы уменьшить размер дистрибутива — их приходилось доустанавливать. Теперь их вернули, всё идёт сразу. Плата — начальный размер загрузки вырос, зато не надо возиться с loadPackage. Пакеты pydecimal и test убрали, опция fullstdlib стала бесполезной (но ещё не удалена). А вот OpenSSL из стдлиба убрали: внедрили кастомную реализацию ssl без реальной поддержки TLS (она всё равно не работала в браузере из-за отсутствия сокетов). Как следствие, hashlib потерял часть криптографических хешей, которые шли через OpenSSL. Зато в Python 3.14 появился модуль compression.zstd — он есть и в Pyodide.

Pyodide теперь нативный ES-модуль. Файл переименовали в pyodide.asm.mjs. Классические воркеры больше не поддерживаются — только модульные. Service workers должны импортировать createPyodideModule из нового файла. Бандлерам нужно обновить конфиги.

В Node.js добавили экспериментальную поддержку сокетов. Можно включать через pyodide.useNodeSockFS(), и TCP-соединения с TLS, async-функции для webloop и неблокирующий режим работают. Протестировали с pymysql, pg8000 и redis-py. На Node.js <= v24 нужен флаг --experimental-wasm-stack-switching.

Улучшили интероп с JavaScript. Добавили pyodide.ffi.JsBigInt — подтип int, который правильно передаёт bigint туда и обратно без потери точности. JavaScript-объекты с [Symbol.dispose] теперь можно использовать как контекстные менеджеры в Python. А PyProxy и PyBufferView обзавелись свои dispose, чтобы работать с using в JS. И расширили поддержку array-like: теперь любой объект с length и итерацией получает нормальную работу с индексами и срезами (proxy[1:4]).

Читать оригинал →