# marimo на Spaces

[marimo](https://github.com/marimo-team/marimo) — это реактивный ноутбук для Python, который моделирует ноутбуки как графы потоков данных. При выполнении ячейки или взаимодействии с элементом пользовательского интерфейса marimo автоматически выполняет затронутые ячейки (или помечает их как устаревшие), поддерживая согласованность кода и результатов и предотвращая ошибки до их появления. Каждый ноутбук marimo хранится в виде чистого Python, может выполняться как скрипт и разворачиваться как приложение.

Ключевые возможности:

- ⚡️ **реактивный:** выполните ячейку, и marimo реактивно выполнит все зависимые ячейки или пометит их как устаревшие
- 🖐️ **интерактивный:** привязка слайдеров, таблиц, графиков и других элементов к Python — без необходимости использовать обратные вызовы
- 🔬 **воспроизводимость:** отсутствие скрытого состояния, детерминированное выполнение, встроенное управление пакетами
- 🏃 **исполняемый файл:** запуск как Python-скрипта, параметризуемого аргументами командной строки
- 🛜 **shareable:** развёртывание в виде интерактивного веб-приложения или слайдов, запуск в браузере через WASM
- 🛢️ **создан для работы с данными:** запросы к датафреймам и базам данных с помощью SQL, фильтрация и поиск в датафреймах

## Развёртывание приложений marimo на Spaces

Чтобы начать работу с marimo на Spaces, нажмите кнопку ниже:

    

Это запустит сборку вашего Space с использованием Docker-шаблона marimo. Если всё пройдёт успешно, вы увидите приложение, похожее на [ноутбук с введением в marimo](https://huggingface.co/spaces/marimo-team/marimo-app-template).

## Настройка вашего приложения marimo

При создании пространства marimo вы получите несколько ключевых файлов, которые помогут вам начать работу:

### 1. app.py

Это основной файл вашего блокнота marimo, в котором определяется логика приложения. Блокноты marimo — это чистые файлы Python, использующие декоратор `@app.cell` для определения ячеек. Чтобы узнать больше о создании блокнотов и приложений, см. [документацию marimo](https://docs.marimo.io). По мере роста приложения вы можете организовывать код в модули и импортировать их в основной блокнот.

### 2. Dockerfile

Dockerfile для приложения marimo минимален, так как у marimo мало системных зависимостей. Ключевые требования:

- Он устанавливает зависимости, перечисленные в `requirements.txt` (с помощью `uv`)
- Создаёт непривилегированного пользователя в целях безопасности
- Он запускает приложение с помощью `marimo run app.py`

Возможно, вам потребуется изменить этот файл, если вашему приложению требуются дополнительные системные зависимости, разрешения или другие флаги CLI.

### 3. requirements.txt

Space автоматически установит зависимости, перечисленные в файле `requirements.txt`. Минимум в этот файл необходимо включить `marimo`. Также добавьте все остальные пакеты, необходимые для вашего приложения.

Шаблон Space marimo обеспечивает базовую настройку, которую можно расширять в соответствии с вашими потребностями. При развертывании ваш блокнот будет работать в «режиме приложения», который скрывает ячейки с кодом и отображает только интерактивные результаты — идеально подходит для демонстрации конечным пользователям. Вы можете включить ячейки с кодом в своем приложении, добавив `--include-code` к команде `marimo run` в Dockerfile.

## Дополнительные ресурсы и поддержка

- [документация marimo](https://docs.marimo.io)
- [репозиторий marimo на GitHub](https://github.com/marimo-team/marimo)
- [Discord marimo](https://marimo.io/discord)
- [Шаблон пространства marimo](https://huggingface.co/spaces/marimo-team/marimo-app-template)

## Устранение неполадок

Если вы столкнулись с проблемами:

1. Убедитесь, что ваш ноутбук запускается локально в режиме приложения с помощью `marimo run app.py`
2. Убедитесь, что все необходимые пакеты перечислены в `requirements.txt`
3. Убедитесь, что конфигурация порта совпадает (7860 — это порт по умолчанию для Spaces)
4. Проверьте журналы Space на наличие ошибок Python

За дополнительной помощью обращайтесь в [Discord-сервер marimo](https://marimo.io/discord) или [создайте issue](https://github.com/marimo-team/marimo/issues).

