[Перевод] Как запустить Jupyter Notebook в браузере без бэкенда

image-loader.svg

К старту нашего флагманского курса по Data Science представляем перевод обзора JupyterLite прямо из блога его разработчиков. JupyterLite — это перезагрузка множества попыток создать полный статический выполняемый в браузере дистрибутив Jupyter, чтобы не было необходимости запускать сервер Jupyter.

Цель проекта — дать лёгкую вычислительную среду в браузере, доступную по одному клику спустя несколько секунд, без установки чего-либо на устройство конечного пользователя. При работе с дистрибутивами в браузере не нужно предоставлять среду выполнения на бэкенде. Приложение в основном представляет собой набор статических файлов, поэтому проще масштабируется и его легче развёртывать.

JupyterLite работает в браузере на статическом веб-сайте ReadTheDocsJupyterLite работает в браузере на статическом веб-сайте ReadTheDocs

Полноценный дистрибутив JupyterLab в браузере

JupyterLite разработан с нуля, он повторно использует множество плагинов и компонентов JupyterLab как есть. В дополнение к JupyterLab JupyterLite по умолчанию работает с интерфейсом RetroLab:

JupyterLite с интерфейсом RetroLabJupyterLite с интерфейсом RetroLab

Благодаря повторному использованию компонентов JupyterLab JupyterLite получает преимущества многих улучшений: новых функций, исправлений специальных возможностей и улучшений обслуживания. В JupyterLite также можно включить совместную работу в реальном времени из JupyterLab 3.1.

Совместная работа в режиме реального времени, JupyterLite в ReadTheDocsСовместная работа в режиме реального времени, JupyterLite в ReadTheDocs

Pyolite — поддерживаемое Pyodide ядро Python

Pyodide — это скомпилированный в WebAssembly интерпретатор CPython 3.8, позволяющий запускать Python в браузере, а также скомпилированных научных пакетов Python.

Из индекса пакетов PyPI Pyodide может установить любой пакет wheel, он содержит комплексный интерфейс внешних функций, предоставляющий экосистему пакетов Python для JavaScript и пользовательский интерфейс браузера для Python, в том числе DOM.

Pyodide: Python и его скомпилированный в WebAssembly научный стекPyodide: Python и его скомпилированный в WebAssembly научный стек

С версии 0.17 за последние несколько лет Pyodide получил множество улучшений: меньший размер двоичных файлов, поддержку asyncio и улучшение трансляции типов между Python и JavaScript.

JupyterLite по умолчанию поставляется с Pyolite — ядром Python, которое поддерживается Pyodide. Это ядро работает в веб-воркере, а значит при выполнении интенсивных вычислений не блокирует основной поток пользовательского интерфейса.

IPython в браузере

Pyolite теперь работает на IPython, что открывает доступ к его магическим командам, завершению кода, расширенному отображению, интерактивным виджетам и многим другим функциям.

IPython в JupyterLiteIPython в JupyterLite

Интерактивная визуализация

В JupyterLite также поддерживаются многие библиотеки визуализации, такие как Altair и Plotly, что позволяет быстро и удобно создавать рисунки и графики:

Altair в JupyterLiteAltair в JupyterLiteimage-loader.svg

Поддержка виджетов Jupyter

В основе виджетов Jupyter лежит спецификация кастомных сообщений протокола Jupyter между ядром и интерфейсом. Мартин Рену добавил поддержку Comms в ядре Pyolite, что позволило многим существующим основным и сторонним виджетам, например bqplot, ipyleaflet и ipycanvas, работать из коробки.

JupyterLite по умолчанию поддерживает виджеты JupyterJupyterLite по умолчанию поддерживает виджеты Jupyter

Больше, чем просто Python

JupyterLite работает со множеством ядер. Дистрибутив по умолчанию содержит ядра JavaScript и p5:

В JupyterLite доступно несколько ядер.В JupyterLite доступно несколько ядер.

Эти ядра выполняются в IFrame как изолированные окружения. С помощью протокола отображения Jupyter можно легко отображать кастомные анимации:

Ядро p5.js в JupyterLiteЯдро p5.js в JupyterLite

JupyterLite гибко настраивается

Как и многие инструменты Jupyter, JupyterLite легко настраивается. С версии 3.0 поддерживается новая встроенная система расширения JupyterLab, а существующие расширения JupyterLab легко повторно использовать в JupyterLab.

Расширение JupyterLab Drawio, работающее в JupyterLiteРасширение JupyterLab Drawio, работающее в JupyterLite

Серверная часть JupyterLite в браузере также использует плагины. Сервер — это регистрирующее несколько плагинов приложение Lumino без оболочки, где регистрируются, например, менеджер содержимого или служба сеансов.

Такой подход делает замену одного плагина на другой очень удобной для разработчиков или администраторов сайта.

Пример: замена менеджера содержимого по умолчанию, который хранит блокноты и файлы в LocalStorage, на менеджера, сохраняющего содержимое в AWS S3.

Обзор архитектуры JupyterLite на основе плагиновОбзор архитектуры JupyterLite на основе плагинов

Модульность и гибкость JupyterLite позволяют легко добавлять ядра. Ядро Basthon, прототип для запуска которого разрабатывается в этом репозитории, использует несколько иную модель выполнения, чем Pyolite: оно запускается в основном потоке пользовательского интерфейса, поэтому пользователи могут напрямую управлять DOM главного окна из Python.

Pyolite, в свою очередь, запускается в веб-воркере как фоновый поток. Оба подхода имеют свои плюсы и минусы, а система плагинов JupyterLite позволяет авторам расширений полностью контролировать свои ядра.

Basthon в JupyterLiteBasthon в JupyterLite

Развёртывание

JupyterLite легко разворачивается как статический веб-сайт. Никакой сложной настройки, никаких проблем с масштабируемостью. Только простой, обычный HTTP-сервер статических файлов.

Поэтому появляются варианты: Nginx, Binder, GitHub Pages или страницы GitLab, Vercel, Netlify и многие другие. Можно развернуть JupyterLite в ReadTheDocs, где размещён и постоянно обновляется демонстрационный сайт JupyterLite.

Многие сценарии развёртывания уже задокументированы здесь, также есть демонстрационный шаблон, позволяющий легко развернуть настраиваемый веб-сайт JupyterLite на страницах GitHub одним кликом.

Благодаря работе Николаса Боллвега в JupyterLite для удобства развёртывания появился инструмент командной строки jupyterlite. Одна из задач JupyterLite — позволить любому пользователю собрать собственный дистрибутив с необходимым ему набором плагинов и расширений. Сегодня для этого нужно работать с jupyterlite, но можно представить экспорт удобнее:

Макет экспортёра JupyterLiteМакет экспортёра JupyterLite

Широкий спектр вариантов

Благодаря простоте развёртывания и низкому порогу входа JupyterLite отлично подходит для широкого спектра задач. В образовательном пространстве он упрощает доступ к учебным материалам и вычислительным средам. Преподаватели и студенты могут сосредоточиться на содержании своих занятий, не беспокоясь о развёртывании и мониторинге серверов.

С помощью JupyterLite мы также надеемся привлечь новую волну пользователей Jupyter и сделать всю экосистему ещё доступнее для новичков и более широкого сообщества. В случае небольших проектов это может даже снизить нагрузку на mybinder.org посредством развёрнутой на CDN версии JupyterLite — binderlite.

Как быстро попробовать JupyterLite

JupyterLite можно протестировать по этой ссылке.

Локальный запуск

Во-первых, установите пакет CLI:

pip install --pre jupyterlite

Затем создайте веб-сайт JupyterLite и разместите его на локальном сервере:

jupyter lite init
jupyter lite build
jupyter lite serve

Документация приложения jupyterlite находится здесь.

А поработать с JupyterLab или JupyterLite на практике вы сможете на наших курсах по Data Science, а на курсе «Machine Learning и Deep Learning» используется оборудование нашего партнёра и лидера в области вычислений для искусственного интеллекта — компании NVIDIA. Кроме того, здесь вы можете узнать, как начать карьеру или прокачаться, например, в Fullstack-разработке на Python:

image-loader.svg

Data Science и Machine Learning

Python, веб-разработка

Мобильная разработка

Java и C#

От основ — в глубину

А также:

© Habrahabr.ru