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