Python и WebAssembly

Python в браузере: запуск кода без установки

В редакторе Python есть режим «Браузерный Python»: настоящий интерпретатор CPython, скомпилированный в WebAssembly, выполняет код на вашем устройстве, а не на сервере. NumPy, pandas и SciPy уже включены, устанавливать ничего не нужно.

Как запустить Python в браузере

  1. Откройте редактор Python.
  2. Под кнопкой «Запустить» переключите режим запуска с «Сервер выполнения» на «Браузерный Python».
  3. Нажмите «Запустить». В первый раз браузер скачает Python и пакеты для работы с данными (всего около 35 МБ) и сохранит их в кэше, поэтому следующие запуски начинаются гораздо быстрее.
  4. Импортируйте NumPy, pandas, SciPy или scikit-learn как обычно. Пример ниже выводит платформу emscripten, если выполняется в браузере, и linux, если на сервере.
browser.py
Открыть в редакторе →
browser.py
import sys
import numpy as np
import pandas as pd

print("Python", sys.version.split()[0], "на платформе", sys.platform)

df = pd.DataFrame({"city": ["Москва", "Казань", "Сочи"], "temp_f": [68, 72, 84]})
df["temp_c"] = ((df["temp_f"] - 32) * 5 / 9).round(1)
print(df)
print("Среднее (C):", np.mean(df["temp_c"]).round(1))

«Браузерный Python» или «Сервер выполнения»

Браузерный PythonСервер выполнения (по умолчанию)
Где выполняется кодНа вашем устройстве, в Web WorkerНа нашем сервере
Ввод с клавиатурыСтроки ввода указываются заранее, до запускаinput() спрашивает данные во время работы программы
БиблиотекиNumPy, pandas, SciPy, Matplotlib, scikit-learn, openpyxlНабор больше: в том числе seaborn, requests и другие
Доступ в интернет из кодаСокетов нет, поэтому requests не работаетЕсть
СкоростьДолгая первая загрузка, затем быстрый старт; тяжёлые циклы работают медленнее, чем в обычном PythonОбычная скорость Python, небольшая задержка на соединение при каждом запуске
ОтладчикНет: для отладки переключитесь на сервер выполненияЕсть: точки останова, пошаговое выполнение, переменные и стек вызовов

Как Python работает на веб-странице

Браузеры умеют выполнять JavaScript и WebAssembly, но не Python. Проект Pyodide компилирует CPython и научные библиотеки в WebAssembly, поэтому в браузере работает тот же интерпретатор, который вы установили бы на компьютер. Другие проекты решают задачу иначе: PyScript запускает Python внутри HTML-страниц поверх Pyodide или MicroPython, JupyterLite открывает ноутбуки прямо в браузере, а Brython переводит Python в JavaScript.

Чтобы запустить Python на своей странице, подключите Pyodide и вызовите runPython:

index.html
<script src="https://cdn.jsdelivr.net/pyodide/v0.25.1/full/pyodide.js"></script>
<script>
  async function main() {
    const pyodide = await loadPyodide();
    console.log(pyodide.runPython("sum(i * i for i in range(10))"));  // 285
  }
  main();
</script>

Если нужно вставить запускаемый пример в блог или конспект, не написав ни строчки кода, возьмите кнопку Run on CodeUtility.

Ограничения Python в браузере

  • Нет сетевых сокетовБраузер из соображений безопасности не даёт открывать сокеты, поэтому библиотеки вроде requests в обычном виде не работают. Программы, которые обращаются к веб-API, запускайте на сервере выполнения.
  • Нет оконTkinter и другие библиотеки для интерфейсов не могут открыть окно. Для графиков есть редактор Matplotlib, который показывает рисунок рядом с кодом, а рисунки черепашкой работают на странице Python turtle (на английском).
  • ПамятьУ вкладки браузера памяти меньше, чем у компьютера, поэтому очень большие наборы данных лучше обрабатывать на сервере выполнения.
  • Первая загрузкаPython и пакеты скачиваются один раз, около 35 МБ; при медленном интернете первый запуск займёт время.

Частые вопросы

Как Python может работать в браузере?

Проект Pyodide компилирует CPython в WebAssembly, поэтому браузер запускает настоящий интерпретатор Python. Редактор скачивает его один раз, после чего код выполняется на вашем устройстве.

Где выполняется мой код в режиме «Браузерный Python»?

На вашем устройстве: программу выполняет браузер, а не наш сервер. При этом редактор, как и при запуске на сервере, сохраняет каждый запуск вместе с кодом - для истории запусков и статистики.

Какие библиотеки доступны?

В режиме «Браузерный Python» загружаются NumPy, pandas, SciPy, Matplotlib, scikit-learn и openpyxl. На сервере выполнения установлено больше пакетов, в том числе seaborn и requests.

Почему первый запуск медленнее?

Сначала браузер скачивает сам Python и пакеты для работы с данными (NumPy, pandas, SciPy, Matplotlib и scikit-learn) - всего около 35 МБ. Они сохраняются в кэше, поэтому следующие запуски начинаются гораздо быстрее.

Работает ли input() в браузере?

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