Pyodide — это уникальный проект, который позволяет запускать полноценный интерпретатор Python через браузер благодаря использованию WebAssembly. За последние годы Pyodide стал важным инструментом для разработчиков, ученых и образовательных платформ, желающих использовать Python без необходимости установки дополнительных приложений. Совсем недавно команда Pyodide объявила о выходе версии 0.28, которая знаменует новый этап интеллектуального развития платформы и усиливает её позицию как ключевого решения для исполнения Python в веб-среде. В релизе 0.
28 реализовано множество изменений, направленных на стандартизацию платформы, улучшение работы с пакетами и повышение производительности. Главным нововведением стало внедрение поддержки Python 3.13, а также определение стандартизированного ABI (Application Binary Interface) для пакетов Pyodide. Стандартизация ABI — это крупный шаг вперёд. До сих пор разработчики зависели от связки определённых версий Python и конкретных сборок пакетов, что сильно усложняло совместимость и обновления.
Теперь же планируется, что один ABI будет соответствовать одной версии Python, что гарантирует работу пакетов, построенных для определённой версии Pyodide, в любых сборках с этим же Python. Это позволит сильно упростить жизнь как разработчикам Pyodide, так и сообществу, особенно собирающим собственные бинарные пакеты с использованием инструментов вроде pyodide-build или cibuildwheel. Интеграция PEP 783, которая в данный момент находится на рассмотрении, задаст новые стандарты для загрузки и распространения Pyodide-пакетов. При её одобрении станет возможно размещать Pyodide-совместимые колёса на PyPI с платформенным тегом pyodide_${YEAR}_${PATCH}_wasm32. Помимо улучшений совместимости, в Pyodide 0.
28 кардинально изменён подход к управлению пакетами. Раньше большинство пакетов было встроено вместе с рантаймом Pyodide, что приводило к длительным циклам обновлений. При любом изменении в основном репозитории происходил повторный сбор и тестирование сотен пакетов, что замедляло выпуск новых версий. Теперь все пакеты вынесены в отдельный репозиторий pyodide/pyodide-recipes, а в основном репозитории остались только пакеты, необходимые для тестирования самого рантайма. Это позволяет выпускать обновления пакетов автономно и значительно ускоряет процесс распространения обновлённого ПО.
Следует отметить, что с переходом на Python 3.13 в Pyodide 0.28 были временно отключены некоторые пакеты. Среди них оказались такие как arro3, duckdb, polars, pyarrow, а также отдельные библиотеки, требующие доработки или обновления их сборок под новую ABI. Эти пакеты будут возвращены после согласования с их мейнтейнерами, что подчёркивает открытый характер и взаимодействие сообщества в развитии Pyodide.
Важным изменением стал новый бэкенд для библиотеки визуализации Matplotlib. Ранее для отрисовки графиков в браузере использовались кастомные бэкенды wasm_backend и html5_canvas, которые со временем устарели и требовали значительных усилий по поддержке. В версии 0.28 была произведена замена на модифицированный официальный бэкенд WebAgg, отличающийся стабильностью и поддержкой новых функций Matplotlib. Благодаря работе Иэна Томаса, разработчика Matplotlib и мейнтейнера JupyterLite, теперь пользователи получают более качественный и надёжный опыт визуализации в браузере.
Среди других технических усовершенствований стоит выделить добавление поддержки runtime paths в Emscripten-модулях. Эта функциональность значительно улучшает работу с разделяемыми библиотеками и их зависимостями. Ранее использовался кастомный патч, который вызывал дополнительные ошибки и не позволял встроить исправления в основной код Emscripten. Нововведение в спецификации WebAssembly и инструментах компиляции позволяет корректно настраивать поиск зависимостей для бинарных модулей, что положительно влияет на производительность и стабильность загрузки пакетов. Также стоит отметить встроенную поддержку JavaScript Promise Integration (JSPI), которая с апреля 2025 года стала полноценной спецификацией уровня Stage 4 и получила широкую поддержку в современных браузерах, включая Chrome 137 и выше.
Pyodide стал одной из первых платформ, открыто реализовавших основы JSPI, что позволяет выполнять асинхронный Python код с использованием asyncio прямо в браузере без необходимости специальных флагов или настроек. Это значительно расширяет возможности интерактивных приложений и науки в вебе. Важная инновация касается обработки значений null и undefined в механизме взаимодействия между Python и JavaScript. Ранее null и undefined конвертировались в None, что нарушало обратную совместимость и ограничивало использование некоторых JavaScript API. Благодаря новым возможностям WebAssembly Garbage Collection (wasm-gc) теперь null поддерживается корректно, что устраняет предыдущие проблемы и повышает надёжность двунаправленного обмена данными между языками.
В рамках комьюнити было отмечено несколько интересных проектов, использующих Pyodide. Например, SPy — статически типизированный Python, который ускоряет вычисления и графическую обработку, а также реализация интерактивной документации для научных библиотек в рамках гранта Института Чана Цзюна (Chan Zuckerberg Institute). Все эти достижения говорят о растущем интересе к Pyodide со стороны научного и образовательного сообществ. Завершая обзор, стоит выразить благодарность множеству участников разработки, а также поддержке со стороны команд Emscripten, CPython и cibuildwheel. Вклад таких специалистов как Сам Клегг, Рассел Кит-Мэджи, Лукаш Ланга и других стал ключевым для успешного выпуска Pyodide 0.
28. Выход этой версии открывает новые горизонты для использования Python в браузере, делая платформу более стабильной, совместимой и удобной для разработчиков и пользователей. Pyodide продолжает укреплять свои позиции как передовое решение для интерактивного программирования в вебе, выигрывая благодаря тесной интеграции с WebAssembly и непрерывному развитию экосистемы.