Если вы веб-разработчик и предпочитаете писать на Python, а не на JavaScript, то Brython — реализация Python, работающая в браузере, — может оказаться для вас привлекательным вариантом.
JavaScript является де-факто языком разработки интерфейсных веб-приложений. Сложные JavaScript-движки являются неотъемлемой частью всех современных интернет-браузеров и естественным образом побуждают разработчиков писать фронтенд веб-приложения на JavaScript. Brython предоставляет лучшее из обоих миров, делая Python языком первого класса в браузере и обеспечивая доступ ко всем существующим библиотекам и API на JavaScript, доступным в браузере.
В этом уроке вы узнаете, как:
Установить Brython в вашем локальном окружении
Использовать Python в браузере
Написать Python-код, взаимодействующий с JavaScript
Разворачивать Python в своем веб-приложении
Создавать расширения для браузера с помощью Python
Оценить Brython в сравнении с другими реализациями Python для веб-приложений
Python-разработчик среднего уровня с опытом в веб-разработке сможет получить максимальную пользу от этого руководства, если у него также есть базовые знания HTML и JavaScript. Чтобы освежить знания по JavaScript, ознакомьтесь со статьей Python против JavaScript для питонистов.
Исходный код к данному материалу можно получить на github
Запуск Python в браузере: преимущества
Хотя JavaScript является общепринятым языком разработки интерфейсных веб-приложений, следующие моменты могут быть для вас актуальны:
Возможно, вам не нравится писать код на JavaScript.
Возможно, вы хотите применить свои навыки программирования на Python.
Возможно, вам не хочется тратить время на изучение JavaScript, чтобы изучать браузерные технологии.
Возможно, вам не понравится необходимость изучать и использовать JavaScript для реализации веб-приложения.
Независимо от причин, многие разработчики предпочли бы использовать альтернативу JavaScript на базе Python для работы с возможностями браузера.
Запуск Python в браузере предоставляет множество преимуществ. Вот лишь некоторые из них:
Выполнять один и тот же код Python на сервере и в браузере
Работать с API браузеров используя Python
Манипулировать объектной моделью документа (DOM) с помощью Python
Использовать Python для взаимодействия с существующими библиотеками JavaScript, такими как Vue.js и jQuery
Преподавайте язык Python студентам с помощью редактора Brython
Сохраняйте ощущение радости от программирования на Python
Одним из побочных эффектов использования Python в браузере является снижение производительности по сравнению с аналогичным кодом на JavaScript. Однако этот недостаток не перевешивает все вышеупомянутые преимущества.
Реализация изоморфной веб-разработки
Изоморфный или универсальный JavaScript, подчеркивает, что приложения JavaScript должны работать как на клиенте, так и на сервере. Это предполагает, что бэкенд основан на JavaScript, а именно на сервере Node. Разработчики Python, использующие Flask или Django, также могут применять принципы изоморфизма к Python, при условии, что Python можно запустить в браузере.
Brython позволяет вам создавать front-end на Python и делиться модулями между клиентом и сервером. Например, вы можете делиться функциями проверки, как в следующем коде, который нормализует и проверяет номера телефонов США:
import re
def normalize_us_phone(phone: str) -> str:
"""Извлекаем цифры и числа из заданного номера телефона"""
return re.sub(r"[^\da-zA-z]", "", phone)
def is_valid_us_phone(phone: str) -> bool:
"""Проверяем 10-значный номер телефона"""
normalized_number = normalize_us_phone(phone)
return re.match(r"^\d{10}$", normalized_number) is not None
normalize_us_phone() исключает любые небуквенно-цифровые символы, тогда как is_valid_us_phone() возвращает True если входная строка содержит ровно десять цифр и не содержит буквенных символов. Один и тот же код может совместно использоваться процессами, запущенными и на сервере Python, и клиентом, созданным с помощью Brython.
Доступ к веб-API
Интернет-браузеры предоставляют стандартизированные веб-API для JavaScript. Эти стандарты являются частью HTML Living Standard. Некоторые примеры веб-API включают:
Brython позволяет использовать веб-API и взаимодействовать с JavaScript. В следующем разделе вы будете работать с некоторыми веб-API.
Прототипирование и библиотеки JavaScript
Часто Python используется для прототипирования фрагментов кода, языковых конструкций или более масштабных задач. С помощью Brython эта популярная практика программирования становится доступной прямо в вашем браузере. Например, вы можете использовать консоль Brython или интерактивный редактор для экспериментов с фрагментами кода.
Откройте онлайн-редактор и введите следующий код:
from browser import ajax
def on_complete(req):
print(req.text)
language = "fr"
ajax.get(f"https://hellosalut.stefanbohacek.dev/?lang={language}",
blocking=True,
oncomplete=on_complete)
Вот как работает этот код:
Строка 1 импортирует модуль ajax.
Строка 3 определяет функцию обратного вызова on_complete(), которая вызывается после получения ответа от ajax.get().
Строка 6 вызывает *ajax.get()*получение перевода слова hello на французский язык с помощью HelloSalut API. Обратите внимание, что blocking может быть True или False при выполнении этого кода в редакторе Brython. Если вы выполняете тот же код в консоли Brython, то необходимо выставить True.
Нажмите кнопку Run над панелью вывода и увидите следующий результат:
{"code":"fr","hello":"Salut"}
Попробуйте изменить язык с fr на es и посмотрите на результат. Коды языков, поддерживаемые этим API, перечислены в документации HelloSalut.
Примечание: HelloSalut — один из публичных API, доступных в Интернете и перечисленных в проекте Public APIs GitHub.
Вы можете изменить фрагмент кода в онлайн-редакторе, чтобы использовать другой публичный API. Например, попробуйте получить случайный публичный API из проекта Public APIs:
from browser import ajax
def on_complete(req):
print(req.text)
ajax.get("https://randomfox.ca/floof/",
blocking=True,
oncomplete=on_complete)
Скопируйте код выше в онлайн-редактор Brython и нажмите Run. Вот пример вывода в формате JSON:
{"image":"https:\/\/randomfox.ca\/images\/123.jpg","link":"https:\/\/randomfox.ca\/?i=123"}
Для получения дополнительной информации о формате JSON ознакомьтесь с разделом Работа с данными JSON в Python.
Вы можете использовать прототипирование, чтобы опробовать обычный код Python, как в интерпретаторе Python. Поскольку вы находитесь в контексте браузера, Brython также предоставляет способы:
Узнайте, как использовать веб-API
Работайте с объектной моделью документа (DOM)
Используйте существующие библиотеки JavaScript, такие как jQuery, D3 и Bokeh, а также с такими фреймворками JavaScript UI, как Vue.js
Чтобы облегчить себе задачу, вы можете воспользоваться большинством из описанных выше функций, открыв консоль или редактор на веб-сайте Brython. Это не требует установки или запуска чего-либо на локальном компьютере. Однако предоставляет вам онлайн-площадку для взаимодействия как с Python, так и с веб-технологиями.
Преподавание Python студентам
Brython — это и компилятор Python, и интерпретатор, написанный на JavaScript. В результате вы можете компилировать и запускать код Python в браузере. Хорошим примером этой функции является онлайн-редактор, доступный на сайте Brython.
С помощью онлайн-редактора Python работает в браузере. Нет необходимости устанавливать Python на машину, и нет необходимости отправлять код на сервер для выполнения. Обратная связь для пользователя мгновенна, и этот подход не подвергает бэкэнд вредоносным скриптам. Студенты могут экспериментировать с Python на любом устройстве с работающим браузером, например, на смартфонах или Chromebook, даже при нестабильном подключении к Интернету.
Замечания о производительности
На сайте Brython отмечается, что скорость выполнения реализации сопоставима с CPython. Однако Brython работает в браузере, а среда его выполнения — это JavaScript, встроенный в движок браузера. Поэтому можно ожидать, что Brython будет медленнее, чем вручную написанный и хорошо оптимизированный JavaScript.
Brython компилирует код Python в JavaScript, а затем исполняет сгенерированный код. Эти шаги влияют на общую производительность, и Brython не всегда может соответствовать вашим требованиям к производительности. В некоторых случаях вам может потребоваться делегировать выполнение некоторого кода JavaScript или даже WebAssembly. Далее вы узнаете, как создать код с помощью WebAssembly и как использовать полученный код в Python в разделе, посвященном WebAssembly.
Тем не менее, не позволяйте предполагаемой производительности отговорить вас от использования Brython. Например, импорт модулей Python может привести к загрузке соответствующего модуля с сервера. Чтобы проиллюстрировать эту ситуацию, откройте консоль Brython и выполните следующий код:
>>> import uuid
Задержка до отображения приглашения (390 мс на тестовой машине) заметна. Это связано с тем, что Brython должен загрузить uuid и его зависимости, а затем скомпилировать загруженные ресурсы. Однако с этого момента нет задержки при выполнении функций, доступных в uuid. Например, вы можете сгенерировать случайный универсальный уникальный идентификатор UUID версии 4, с помощью следующего кода:
>>> uuid.uuid4()
UUID('291930f9-0c79-4c24-85fd-f76f2ada0b2a')
Вызов uuid.uuid4() генерирует объект UUID, строковое представление которого выводится в консоль. Вызов uuid.uuid4() происходит немедленно и намного быстрее, чем первоначальный импорт модуля uuid.
Развлекайтесь
Если вы читаете это руководство, значит вас, вероятно, интересует написание кода на Python в браузере. Видеть выполняемый в браузере Python-код для большинства питонистов захватывающе и пробуждает ощущение радости и бесконечных возможностей.
Автор Brython, Пьер Кентель и участники проекта, выполняя важную задачу по адаптации языка для работы в веб-браузере, также не забывали об увлекательности программирования на Python.
Чтобы это доказать, откройте в своем браузере интерактивную консоль Brython и в командной строке Python введите следующее:
import this
Подобно опыту Python на локальной машине, Brython компилирует и выполняет инструкции на лету и выводит The Zen of Python. Это происходит в браузере, и выполнение кода Python не требует никакого взаимодействия с внутренним сервером:
Вы также можете попробовать еще одно классическое пасхальное яйцо Python в той же браузерной среде с помощью следующего кода:
import antigravity
Brython использует те же элементы юмора, которые вы найдете в эталонной реализации Python.
Теперь, когда вы знакомы с основами работы с Brython, вы изучите более продвинутые функции в следующих разделах.
Установка Brython
Эксперименты с онлайн-консолью Brython — хорошее начало, но они не позволят вам развернуть ваш код Python. Существует несколько различных вариантов установки Brython в локальной среде:
Инструкции по каждому из этих методов приведены ниже, но можно смело перейти сразу к предпочтительному для вас подходу, если вы уже приняли решение.
Установка CDN
Сеть доставки контента (CDN) — это сеть серверов, которая позволяет улучшить производительность и скорость загрузки онлайн-контента. Вы можете установить библиотеки Brython из нескольких различных CDN:
Вы можете выбрать эту установку, если хотите развернуть статический веб-сайт и добавить на свои страницы минимальное количество динамических функций. Вы можете рассматривать этот вариант как замену jQuery, но с использованием Python вместо JavaScript.
Чтобы проиллюстрировать использование Brython с CDN, будем использовать CDNJS. Создадим файл со следующим HTML-кодом:
<!doctype html>
<html>
<head>
<script
src="https://cdnjs.cloudflare.com/ajax/libs/brython/3.13.0/brython.js">
</script>
</head>
<body onload="brython()">
<script type="text/python">
import browser
browser.alert("Hello Real Python!")
</script>
</body>
</html>
Вот ключевые элементы этой HTML-страницы:
В строке 5 загружается brython.js из CDNJS.
В строке 8 выполняется brython() после завершения загрузки документа. brython() считывает код Python в текущем контексте и компилирует его в JavaScript. Подробнее см. в разделе Понимание работы Brython.
Строка 9 устанавливает тип скрипта text/python. Это указывает Brython, какой код необходимо скомпилировать и выполнить.
Строка 10 импортирует browser — модуль Brython, который включает объекты и функции для взаимодействия с браузером.
Строка 11 вызывает alert(), который отображает окно сообщения с текстом "Hello Real Python!"
Сохраните файл как index.html, затем дважды щелкните файл, чтобы открыть его в браузере. Браузер отобразит окно сообщения с "Hello Real Python!" Нажмите OK, чтобы закрыть окно сообщения:
Чтобы уменьшить размер загружаемого файла, особенно в рабочей среде, используйте минимизированную версию brython.js:
<script
src="https://cdnjs.cloudflare.com/ajax/libs/brython/3.13.0/brython.min.js">
</script>
Минимизированная версия сократит время загрузки и воспринимаемую задержку с точки зрения пользователя. В разделе Понимание работы Brython вы узнаете, как Brython загружается браузером и как выполняется приведенный выше код Python.
Установка GitHub
Установка GitHub очень похожа на установку CDN, но она позволяет создавать приложения Brython с development-версией. Можно скопировать предыдущий пример и изменить URL в элементе head, получив следующий index.html:
<!doctype html>
<html>
<head>
<script
src="https://raw.githack.com/brython-dev/brython/master/www/src/brython.js">
</script>
</head>
<body onload="brython()">
<script type="text/python">
import browser
browser.alert("Hello Real Python!")
</script>
</body>
</html>
Сохранив этот файл в локальном каталоге дважды щелкните по нему, чтобы отобразить в браузере эту страницу.
Установка PyPI
До сих пор вам не нужно было ничего устанавливать в локальной среде. Вместо этого вы указали в HTML-файле, где браузер может найти пакет Brython. Когда браузер открывает страницу, он загружает файл JavaScript Brython из соответствующей среды, либо из CDN, либо из GitHub.
Brython также доступен для локальной установки на PyPI. Установка PyPI подойдет вам, если:
Вам необходимо больше контроля и настроек среды Brython, чем доступно при указании файла CDN.
Вы имеете опыт работы с Python и знакомы с pip.
Вам нужна локальная установка, чтобы минимизировать сетевые задержки во время разработки.
Вы хотите более детально управлять вашим проектом и его результатами.
Установка Brython из PyPI устанавливает brython_cli — утилиту командной строки, которую можно использовать для автоматизации таких функций, как создание шаблона проекта или упаковка и объединение модулей для упрощения развертывания проекта Brython.
Для получения более подробной информации см. документацию по локальной установке, чтобы узнать о возможностях brython-cli, которые доступны в вашей среде после установки. brython-cli доступна только при этом типе установки. Она недоступна, если вы устанавливаете из CDN или с помощью npm. Далее в руководстве вы увидите brython-cli в действии.
Перед установкой Brython необходимо создать виртуальную среду Python для этого проекта.
В Linux или macOS выполните следующие команды:
$ python3 -m venv .venv --prompt brython
$ source .venv/bin/activate
(brython) $ python -m pip install --upgrade pip
Collecting pip
Downloading pip-24.3.1-py3-none-any.whl.metadata (3.7 kB)
Downloading pip-24.3.1-py3-none-any.whl (1.8 MB)
---------------------------------------- 1.8/1.8 MB 5.0 MB/s eta 0:00:00
Installing collected packages: pip
Attempting uninstall: pip
Found existing installation: pip 24.0
Uninstalling pip-24.0:
Successfully uninstalled pip-24.0
Successfully installed pip-24.3.1
В Windows выполните следующие действия:
> python3 -m venv .venv --prompt brython
> .venv\Scripts\activate
(brython) > python -m pip install --upgrade pip
Collecting pip
Downloading pip-24.3.1-py3-none-any.whl.metadata (3.7 kB)
Downloading pip-24.3.1-py3-none-any.whl (1.8 MB)
---------------------------------------- 1.8/1.8 MB 5.0 MB/s eta 0:00:00
Installing collected packages: pip
Attempting uninstall: pip
Found existing installation: pip 24.0
Uninstalling pip-24.0:
Successfully uninstalled pip-24.0
Successfully installed pip-24.3.1
Только что вы создали специальную среду Python для своего проекта и обновили ее pip до последней версии.
В следующих шагах вы установите Brython и создадите проект по умолчанию. Команды одинаковы для Linux, macOS и Windows:
(brython) $ python -m pip install brython
Collecting brython
Downloading brython-3.13.0-py3-none-any.whl.metadata (1.0 kB)
Downloading brython-3.13.0-py3-none-any.whl (1.5 MB)
---------------------------------------- 1.5/1.5 MB 8.6 MB/s eta 0:00:00
Installing collected packages: brython
Successfully installed brython-3.13.0
(brython) $ mkdir web
(brython) $ cd web
(brython) $ brython-cli install
Installing Brython 3.13.0
done
Вы установили Brython из PyPI, создали пустую папку с именем web/ и сгенерировали скелет проекта по умолчанию, выполнив brython-cli скопированный в виртуальную среду во время установки.
В папке web/ команда brython-cli install создала шаблон проекта и сгенерировала следующие файлы:
Файл |
Описание |
---|---|
README.txt |
Как запустить HTTP-сервер Python и открыть demo.html |
brython.js |
Ядро Brython (компилятор, среда выполнения и интерфейс браузера) |
brython_stdlib.js |
Стандартная библиотека Brython |
demo.html |
Исходный код демонстрационной HTML-страницы Brython |
index.html |
Простейший пример, который можно использовать в качестве исходной страницы для проекта |
unicode.txt |
База данных символов Unicode (UCD), которую использует unicodedata |
Чтобы протестировать этот свежесозданный веб-проект, можно запустить локальный веб-сервер Python с помощью следующих команд:
(brython) $ python -m http.server
Serving HTTP on :: port 8000 (http://[::]:8000/) ...
При выполнении python -m http.server Python запускает веб-сервер на порту 8000. Ожидаемая страница по умолчанию — index.html. Укажите в браузере URL http://localhost:8000 и отобразить страницу с текстом Hello:
Для более полного примера измените URL в адресной строке браузера на http://localhost:8000/demo.html. Вы должны увидеть страницу, похожую на демонстрационную страницу Brython:
При таком подходе файлы Brython JavaScript загружаются напрямую из вашей локальной среды. Обратите внимание на атрибут src в элементе head в index.html:
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<script type="text/javascript" src="brython.js"></script>
<script type="text/javascript" src="brython_stdlib.js"></script>
</head>
<body onload="brython(1)">
<script type="text/python">
from browser import document
document <= "Hello"
</script>
</body>
</html>
HTML выше имеет отступ для улучшения читаемости в этом руководстве. Команда brython_cli install не делает отступ в исходном шаблоне HTML, который она генерирует.
HTML-файл представляет несколько новых функций Brython:
Строка 6 загружает brython_stdlib.js — стандартную библиотеку Python, скомпилированную в JavaScript.
Строка 8 вызывает brython()* с аргументом 1 для вывода сообщений об ошибках в консоль браузера.
Строка 10 импортирует document из модуля browser. Функции для доступа к DOM доступны в document.
В строке 11 используется символ <= в качестве синтаксического сахара. В этом примере document <= "Hello" является заменой выражению document.body.appendChild(document.createTextNode("Hello")). Подробную информацию об этих функциях DOM см. в Document.createTextNode.
Оператор <= используется для добавления дочернего узла к элементу DOM. Далее вы увидите более подробную информацию об использовании операторов, специфичных для Brython, в разделе API DOM в Brython.
Установка npm
Если вы хорошо разбираетесь в экосистеме JavaScript, то установка npm может вас заинтересовать. Для выполнения этой установки требуются Node.js и npm.
Установка с помощью npm сделает модули JavaScript Brython доступными в вашем проекте, как и любые другие модули JavaScript. Затем вы сможете воспользоваться вашим любимым инструментом JavaScript для тестирования, упаковки и развертывания интерпретатора и библиотек Brython. Эта установка идеальна, если у вас уже есть установленные с помощью npm библиотеки JavaScript.
Примечание : Если в вашей системе не установлены Node.js и npm, то рассматривайте оставшуюся часть этого раздела только в ознакомительных целях и можете спокойно пропустить саму установку. Оставшаяся часть руководства не зависит от метода установки npm ни для одного из примеров.
Предполагая, что в вашей системе установлен npm, создайте файл package.json командой npm init --yes в пустом каталоге:
$ npm init --yes
Wrote to /Users/john/projects/brython/npm_install/package.json:
{
"name": "npm_install",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC"
}
Чтобы интегрировать Brython в свой проект, выполните следующую команду:
$ npm install brython
npm notice created a lockfile as package-lock.json. You should commit this file.
npm WARN npm_install@1.0.0 No description
npm WARN npm_install@1.0.0 No repository field.
+ brython@3.13.0
added 1 package from 1 contributor and audited 1 package in 1.778s
found 0 vulnerabilities
Можете игнорировать предупреждения и убедитесь, что Brython был добавлен в ваш проект. Для подтверждения откройте package.json и проверьте, что у вас есть свойство dependencies, указывающее на объект, содержащий слово brython:
{
"name": "npm_install",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC",
"dependencies": {
"brython": "^3.13.0"
}
}
Как и в предыдущих примерах, вы можете создать следующий index.html и открыть его в своем браузере. Для этого примера веб-сервер не нужен, поскольку браузер может загрузить JavaScript-файл node_modules/brython/brython.js локально:
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<script
type="text/javascript"
src="node_modules/brython/brython.js" defer>
</script>
</head>
<body onload="brython()">
<script type="text/python">
from browser import document
document <= "Hello"
</script>
</body>
</html>
Браузер отобразит index.html и загрузит brython.js из URL, указанного в теге script в index.html. В этом примере вы увидели другой способ установки Brython, который использует преимущества экосистемы JavaScript. В оставшейся части руководства вы напишете код, который опирается на установку CDN или установку PyPI.
Обзор вариантов установки Brython
Brython одной ногой стоит в мире Python, а другой — в JavaScript. Различные варианты установки иллюстрируют эту кросс-технологическую ситуацию. Выберите установку, которая кажется вам наиболее убедительной, исходя из вашего бэкграунда.
В следующей таблице приведены некоторые рекомендации:
Тип установки |
Контекст |
---|---|
CDN |
Вы хотите развернуть статический веб-сайт и добавить на свои страницы некоторое динамическое поведение с минимальными издержками. Вы можете рассматривать этот вариант как замену jQuery, ф также использование Python вместо JavaScript. |
GitHub |
Это похоже на установку CDN, но если хотите поэкспериментировать с новейшей версией Brython. |
PyPI |
Если у вас есть опыт работы с Python, вы знакомы с pip, виртуальными средами Python и знаете, как их создавать. Вашему проекту могут потребоваться некоторые настройки, которые вы хотите сохранить в локальной среде или в репозитории исходного кода. Вы хотите иметь больше контроля над пакетом, который вы будете распространять. Вы хотите развернуть его в закрытой среде без доступа к Интернету. |
npm |
Если у вас есть опыт работы с JavaScript, вы знакомы с инструментами JavaScript, в частности с Node.js и npm. Ваш проект может потребовать некоторых настроек, которые вы хотите сохранить в локальной среде или в репозитории исходного кода. Вы хотите иметь больше контроля над пакетами, которые вы будете распространять. Вы хотите развернуть в закрытой среде без доступа к Интернету. |
В этой таблице суммированы различные доступные вам варианты установки. В следующем разделе вы узнаете больше о том, как работает Brython.
Понимание работы Brython
Ваше знакомство с различными способами установки Brython дало вам общее представление о том, как работает реализация. Вот краткое изложение некоторых характеристик, которые вы узнали на этом этапе руководства:
Это реализация Python на JavaScript.
Это транслятор Python в JavaScript и среда выполнения, работающая в браузере.
-
Он предоставляет две основные библиотеки, доступные в виде файлов JavaScript:
brython.js является ядром языка Brython, как подробно описано в разделе Основные компоненты Brython.
brython_stdlib.js — это Стандартная библиотека Brython.
Он вызывает brython(), который компилирует код Python, содержащийся в тегах script с типом text/python. В следующих разделах вы более подробно рассмотрите принцип работы Brython.
Основные компоненты Brython
Ядро Brython содержится в brython.js или в brython.min.js, минимизированной версии движка Brython. Обе включают следующие ключевые компоненты:
brython() — это основная функция JavaScript, представленная в глобальном пространстве имен JavaScript. Вы не можете выполнить какой-либо код Python без вызова этой функции. Это единственная функция JavaScript, которая вызывается явно.
BRYTHON — глобальный объект JavaScript, который содержит все внутренние объекты, необходимые для запуска скриптов Python. Этот объект не используется напрямую при написании приложений Brython. Если вы посмотрите на код Brython — как JavaScript, так и Python, то увидите регулярное появление BRYTHON. Вам не нужно использовать этот объект, но вы должны знать о нем, когда видите ошибку или когда хотите отладить свой код в консоли браузера.
Встроенные типы — это реализации встроенных типов Python в JavaScript. Например, py_int.js, py_string.js и py_dicts.js — это соответствующие реализации int, str и dict.
browser — это модуль браузера, который предоставляет объекты JavaScript, обычно используемые в интерфейсных веб-приложениях, такие как интерфейсы DOM с использованием document и окно браузера с использованием объекта window.
Вы увидите каждый из этих компонентов в действии, работая с примерами в этом руководстве.
Стандартная библиотека Brython
Теперь, когда у вас есть общее представление о базовом Brython-скрипте brython.js вы узнаете о сопутствующем ему brython_stdlib.js.
brython_stdlib.js предоставляет стандартную библиотеку Python. Посредством этого скрипта Brython компилирует стандартную библиотеку Python в JavaScript и объединяет результат с brython_stdlib.js.
Brython призван быть максимально приближенным к CPython, эталонной реализации Python. Для получения дополнительной информации о CPython ознакомьтесь с материалами Your Guide to the CPython Source Code и CPython Internals.
Поскольку Brython работает в контексте веб-браузера и у него есть некоторые ограничения. Например, браузер не разрешает прямой доступ к файловой системе, поэтому открытие файла с помощью os.open() невозможно. Функции, не относящиеся к веб-браузеру, могут быть не реализованы. Например, код ниже работает в среде Brython:
>>> import os
>>> os.unlink()
Traceback (most recent call last):
File <string>, line 1, in <module>
NotImplementedError: posix.unlink is not implemented
os.unlink() вызывает исключение, поскольку удаление локального файла из среды браузера небезопасно, а API файлов и записей каталогов является лишь черновым вариантом.
Brython поддерживает только собственные модули Python. Он не поддерживает модули Python, созданные на C, если только они не были переписаны на JavaScript. Например, hashlib написан на C в CPython и реализован на JavaScript в Brython. Вы можете ознакомиться со списком модулей в дистрибутиве Brython, чтобы сравнить его с реализацией CPython.
Чтобы импортировать модули из стандартной библиотеки Python вам необходимо включить brython_stdlib.js или brython_stdlib.min.js.
Brython в действии
К этому моменту вы, вероятно, задаетесь вопросом, как Brython работает в браузере, который поддерживает только JavaScript. С помощью уже рассмотренных примеров и инструментов браузера вы узнаете, как выполняется код на Python в этой среде.
В разделе Установка CDN вы видели следующий пример:
<!doctype html>
<html>
<head>
<script
src="https://cdnjs.cloudflare.com/ajax/libs/brython/3.13.0/brython.js">
</script>
</head>
<body onload="brython()">
<script type="text/python">
import browser
browser.alert("Hello Real Python!")
</script>
</body>
</html>
После загрузки и анализа HTML-страницы brython() выполняет следующие действия:
Считывает код Python, содержащийся в элементе
Комментарии (7)
phaggi
11.01.2025 11:48Правильно ли я понимаю, что этот подход - обрезанные псевдоядро и стандартная библиотека, транслирующие код в JS - приводит к тому, что писать приходится в синтаксисе Python, а мыслить в парадигме JS?
JohnGear
11.01.2025 11:48Если мне надо порезать хлеб я использую нож, а если съесть тарелку супа то ложку. Похожим образом, если мне надо писать фронтэнд я использую JS, если мне надо написать бэкэнд я использую Python. Зачем мне выдумывать велосипед, если конечно не брать в расчет столь весомое преимущество, как "Сохраняйте ощущение радости от программирования на Python"?)))
vagon333
11.01.2025 11:48Это не перевод статьи, а выборочная нарезка, с потерей массы полезной информации.
Для интересующихся есть смысл прочитать полный текст статьи.
https://realpython.com/brython-python-in-browser/
Кстати, по поводу более шустрого выполнения Python Scripts в веб-браузере, есть еще WebAssembly Pyodide (Pyodide.org).
AuToMaton
Ау, люди, кто-нибудь может объяснить как обрывающийся на полуслове текст смог получить, на момент написания сего, оценку +2?
phaggi
Да чё там: вижу Python - ставлю лайк. Кто эту простыню читает?