Это следующая большая вещь? Возможно, если он продолжит развиваться.

Во время конференции PyCon в США в 2022 году один из основных докладчиков Питер Ван представил PyScript — способ написания скрипта Python непосредственно в HTML. Если вы не знаете Питера, возможно, вы слышали об Anaconda, одном из самых популярных дистрибутивов Python и R с особым акцентом на науку о данных. Питер — генеральный директор и соучредитель Anaconda.

Другими словами, PyScript разработан уважаемой технологической компанией, которая может обещать его жизнеспособность в ближайшем будущем. Он получил большое внимание среди Python и веб-разработчиков и имеет более 10 тысяч звезд на GitHub. Однако то, сможет ли он стать успешным продуктом, зависит от долгосрочных инвестиций времени и развития, чтобы сделать его конкурентоспособным продуктом, у которого есть некоторые известные недостатки (которые будут обсуждаться ближе к концу).

Без лишних слов, давайте быстро взглянем на этот захватывающий продукт!

Тег py-скрипта

Мы знаем, что наиболее распространенным элементом большинства веб-сайтов являются файлы HTML. Когда мы создаем веб-сайт, наша работа заключается в прямом или косвенном создании HTML-файлов с помощью некоторых фреймворков. В типичном файле HTML вы увидите различные типы тегов. Например, <head> определяет метаданные и ключевую информацию о HTML-странице, <title> — это заголовок документа, а <h1>, <h2> и т. д. определяют различные уровни заголовков.

Как упоминалось ранее, PyScript позволяет писать сценарии Python в HTML и использует специальный тег — py-script. Внутри тега вы можете встроить свой скрипт Python. Чтобы увидеть, как это работает, вы можете создать HTML-файл, содержащий следующий код, и открыть его с помощью Chrome. В вашем Chrome вы должны увидеть что-то вроде следующего:

В приведенном выше фрагменте кода вы можете заметить, что важны три вещи.

  • Тег link определяет внешнюю таблицу стилей. В нашем случае мы используем файл css, предоставленный PyScript.
  • Мы используем тег script для встраивания внешнего скрипта, размещенного на PyScript, как определено src. Мы используем defer, чтобы скрипт выполнялся после того, как он был загружен и страница завершила анализ — по сути, отложенное выполнение, а не в реальном времени.
  • Самая интересная часть — это тег py-script. Как видите, print(“Hello, World!”) — это код Python. Когда мы выполняем файл HTML, мы видим результат оценки кода.

Это круто, не так ли? Если вы не знакомы с веб-разработкой, но знаете Python, используя PyScript, вы можете внедрить любой действительный код Python. Давайте посмотрим еще один пример.

Здесь мы пишем код, требующий вычислений, и, как видите, скрипт выполняется корректно.

Тег py-env

Когда мы пишем более сложный код, нам нужно использовать сторонние библиотеки. В этом случае мы можем воспользоваться тегом py-env. Как вы уже догадались, env — это сокращение от environment. В теге py-env вы перечисляете необходимые пакеты Python для запуска вашего кода.

Возможно, вы знаете, что многие специалисты по данным используют панд для обработки данных. Давайте посмотрим на следующий пример.

Как вы можете видеть выше, мы указываем зависимости (т. е. pandas) в теге py-env, который помещается в тег head. Если для вашей страницы требуется больше зависимостей, вы можете перечислить их все здесь:

<py-env>
  - pandas
  - matplotlib
  - numpy
</py-env>

В теге py-script, как вы можете видеть, мы действительно можем использовать библиотеку pandas для создания объекта DataFrame. Однако, когда мы печатаем его, это одна строка вместо структурированной таблицы данных. Без надлежащей структуры мы не можем понять данные. К счастью, мы можем использовать функцию write, как будет показано ниже.

Запись содержимого в назначенный тег

Помимо стандартной функции print в Python, как часть вашего скрипта, PyScript имеет собственную функцию write для отправки данных в определенные веб-элементы на вашей странице. Рассмотрим следующий пример:

В приведенном выше фрагменте кода есть два существенных изменения по сравнению с предыдущим примером.

  • Теперь мы определяем подразделение с идентификатором “DataFrame”, чтобы к нему можно было обращаться позже.
  • В теге py-script мы создаем тот же объект DataFrame, что и раньше. Но теперь вместо вызова print мы теперь вызываем функцию pyscript.write, чтобы попросить PyScript обработать отображение объекта DataFrame в разделе “DataFrame”. Из вывода видно, что теперь у нас есть структурированная таблица.

Функция write умеет писать не только таблицы, но и цифры. В следующем примере показано, как мы можем отобразить график, созданный Python, с помощью matplotlib, еще одного популярного пакета Python для визуализации данных.

Как видите, функция write отображает изображение нужным образом.

Тег py-repl

Один из лучших способов изучения Python — использовать REPL: Read, Evaluate, Print и Loop. То есть вы используете интерактивную консоль Python, вводите какой-то код, Python оценивает его и печатает любые применимые выходные данные, и вы продолжаете цикл. Веб-страница может предоставить такую ​​среду REPL, как Jupyter Notebook.

PyScript может предоставить что-то подобное, используя тег py-repl. В этом элементе вы можете разрешить пользователям писать код самостоятельно или вводить код программно. См. следующий пример:

Как видите, у нас есть ячейка, содержащая код, который мы указываем в теге py-repl. Примечательно, что код в ячейке может ссылаться на переменные, которые мы определили ранее в теге py-script. Таким образом, все работает слаженно.

Последние мысли

Это лишь основные моменты того, что PyScript может предложить на данном этапе. Это многообещающий продукт, поскольку он предоставляет гибкую структуру, которая позволяет программистам Python создавать веб-приложения без особых знаний в веб-разработке. Тем не менее, есть аналогичные успешные продукты, и поэтому конкуренция будет жесткой.

Например, если мне нужно создать веб-приложение для своих проектов по науке о данных, я просто использую Streamlit, который является относительно зрелым с точки зрения его функциональных возможностей. Обратите внимание, что PyScript и Streamlit — это разные линейки продуктов, хотя оба они связаны с веб-разработками. Предполагается, что PyScript более универсален, поскольку его цель — встроить любой код Python на любую веб-страницу, чего не может сделать Streamlit.

Есть несколько недостатков, которые PScript должен устранить, прежде чем он получит лучший прием. Например, скорость загрузки веб-страницы очень низкая. Если вы попробуете запустить код, следуя этому руководству, вы, вероятно, заметите, что может возникнуть значительная задержка, прежде чем веб-страница сможет отображаться правильно.

Тем не менее, я ожидаю, что этот продукт продолжит развиваться, и моя уверенность в основном исходит от его разработчика — команды Anaconda, которая принесла нам замечательный инструмент Anaconda.