Опенсорс
May 31

Marimo — как Jupyter, только лучше 😎

Marimo — интересная open-source IDE, которая не просто копирует Jupyter, а предлагает принципиально иной подход к работе с Python-кодом.

Что такое marimo и чем он так хорош?

Marimo позиционирует себя как реактивный Python-ноутбук. Это ключевое слово – "реактивный". Что это значит на практике?

  • Автоматическое обновление зависимостей: Запустили ячейку или изменили значение в интерактивном UI-элементе (например, подвинули слайдер)? marimo автоматически отслеживает зависимости между ячейками и либо перезапускает все затронутые ячейки, либо (если вы так настроили для дорогих вычислений) помечает их как "устаревшие" (stale). Это решает одну из главных головных болей Jupyter – необходимость вручную следить за порядком выполнения и консистентностью состояния.
  • Никаких скрытых состояний: Удалили ячейку? marimo удаляет ее переменные из памяти. Это должно предотвратить ситуации, когда "непонятно откуда взявшееся" значение влияет на результаты.
  • Детерминированный порядок выполнения: Порядок выполнения ячеек определяется их зависимостями, а не физическим расположением на странице. Это позволяет организовывать ноутбук более логично.

Ноутбуки как чистый Python (.py файлы)

Еще одна интересная фича – marimo сохраняет ноутбуки как обычные .py файлы. Прощайте, громоздкие .ipynb с их JSON-структурой и вшитыми выводами!
Это дает сразу несколько преимуществ:

  • Git-дружелюбность: Диффы становятся человекочитаемыми, мержи – менее болезненными.
  • Исполняемость как скриптов: Любой marimo-ноутбук можно запустить как обычный Python-скрипт.
  • Интеграция с IDE: Легче использовать привычные инструменты для анализа и рефакторинга кода.
  • Переиспользование: Функции и классы из одного ноутбука можно импортировать в другой.

Интерактивность и "батарейки в комплекте"

Marimo не обделен и современными фичами для интерактивной работы и удобства разработчика:

  • Интерактивные UI-элементы без коллбэков: Слайдеры, выпадающие списки, таблицы и даже чат-интерфейсы легко связываются с Python-кодом.
  • Работа с данными: Встроенный SQL-движок для запросов к датафреймам, базам данных, CSV, Google Sheets. Интерактивный просмотрщик датафреймов с пагинацией, поиском, фильтрацией и сортировкой.
  • Динамический Markdown и SQL: Используйте Markdown для создания динамических отчетов, зависящих от данных Python, или стройте SQL-запросы, используя значения из Python.
  • Встроенный менеджер пакетов: Поддержка pip, conda (частично), poetry, pdm. Возможность сериализовать зависимости прямо в файле ноутбука и автоматически устанавливать их в изолированные venv.
  • Современный редактор: GitHub Copilot, AI-ассистенты, Ruff для форматирования, быстрый автокомплит, просмотрщик переменных и многое другое.
  • Деплоймент: Возможность развернуть ноутбук как интерактивное веб-приложение или слайды. Поддержка запуска в браузере через WASM.
  • Тестирование: Ноутбуки можно тестировать с помощью pytest.

Основная философия marimo: Обеспечить консистентность кода, вывода и состояния программы, устраняя типичные проблемы традиционных ноутбуков, связанные с ручным управлением выполнением ячеек и скрытыми состояниями.

Как начать работать с marimo?

Установка довольно проста:

pip install marimo
# или для установки с рекомендуемыми зависимостями (SQL, AI и т.д.):
# pip install marimo[recommended]

После установки можно сразу запустить туториал:

marimo tutorial intro

Создание или редактирование ноутбука:

marimo edit your_notebook_name.py

Запуск ноутбука как веб-приложения (код будет скрыт):

marimo run your_notebook.py

Конвертация из Jupyter Notebook:

marimo convert your_notebook.ipynb > your_notebook.py

Сравнение с Jupyter: ключевые отличия

Сравнение основных различий между marimo и Jupyter Notebook