Anaconda, создатели дистрибутива Python для научных вычислений, анонсировали на PyCon US 2022 проект PyScript — встроенный в браузер способ запуска сценариев Python на страницах HTML так же легко, как и сам JavaScript.
Традиционно Python мог взаимодействовать с JavaScript или веб-страницей только в качестве сервера приложений, возвращающего HTML и JavaScript. PyScript не имеет серверного компонента; все работает прямо в браузере.
Используя PyScript, полезные компоненты из мира Python и JavaScript можно развертывать параллельно. В одном примере, демонстрационном примере данных такси Нью-Йорка, PyScript использует Pandas для анализа данных, а затем генерирует интерактивное трехмерное представление данных с помощью JavaScript WebGL.
Демонстрация PyScript (рендеринг работы такси в Нью-Йорке в режиме реального времени), в которой используются библиотеки Pandas для обработки чисел и библиотеки визуализации JavaScript для обеспечения интерактивного представления данных.
PyScript использует полный порт среды выполнения CPython на WebAssembly для запуска встроенного кода Python. Вы помещаете свой код Python внутрь <py-script>
теги, и вы можете поместить его вывод в выбранный <div>
. А <py-repl>
тег вставляет блок REPL, который позволяет вводить и выполнять код, а также <py-env>
функции тегов, такие как файл require.txt в репозитории, для перечисления необходимых пакетов.
Среда выполнения PyScript также поддерживает многие распространенные пакеты Python, такие как научные библиотеки, входящие в состав Anaconda — NumPy, Pandas, Scikit-learn и многие другие. Демонстрации в репозитории PyScript демонстрируют различные способы сделать это.
Хотя PyScript все еще находится на ранних стадиях разработки, он уже обеспечивает возможность взаимодействия Python и JavaScript — например, Python может ссылаться на DOM, а объекты JavaScript — обращаться к объектам Python. PyScript также позволяет использовать эквиваленты в браузере для многих действий, необходимых в дистрибутиве Python, например перечисление требований к пакету для сценария.
Более ранним проектам в этом духе, таким как Pyodide (который PyScript использует в качестве основы для своей работы), не хватало плавной интеграции PyScript между JavaScript и Python и его широкого доступа к пакетам. PyScript имеет доступ ко всем пакетам, доступным через PyPI, при этом широко используемые Pandas и NumPy уже доступны.
Однако сторонние пакеты работают лучше всего, если они написаны на чистом Python. В PyScript пока нет механизма автоматического создания двоичных файлов платформы для пакетов, хотя теоретически это возможно. Еще одним препятствием является время и пропускная способность, необходимые для загрузки и настройки всех компонентов, необходимых для конкретной веб-страницы с поддержкой PyScript. Основная среда выполнения Python занимает около 3,4 МБ WebAssembly, хотя она кэшируется после первой загрузки.
Цель Anaconda в отношении PyScript, как описано в сообщении на форуме сообщества, — сделать его одним из возможных решений давней проблемы упаковки и развертывания приложений Python. Уже давно было сложно взять скрипт Python, особенно со множеством зависимостей, и собрать его в пакет, чтобы кто-то другой мог использовать его «как есть», без среды выполнения Python.