Solara против Streamlit: новый инструмент для Data Science-приложений
Почему управление состоянием в Streamlit может стать проблемой и чем Solara интересна разработчикам Python и специалистам по данным.

В жизни каждого Data Scientist наступает момент, когда нужно наконец выйти за пределы Jupyter Notebook или Google Colab. Иногда результат сложной модели приходится показывать клиенту, а устанавливать Jupyter у себя на компьютере он точно не будет. И по удивительному совпадению вы знаете только Python.
После короткого поиска появляется Streamlit. На первый взгляд всё идеально: Python, приятный внешний вид и возможность очень быстро собрать приложение, которое не стыдно показать заказчику.
Хороший, плохой, злой
Разочарование приходит довольно быстро. Одна из главных проблем Streamlit — работа с Session State.
Представьте, что в приложении есть несколько кнопок и у каждой своё значение:
button1 = 0
button2 = yes
button3 = 2137
Изменение одной кнопки может привести к повторному выполнению всей страницы. Особенно неприятно, когда после небольшой правки приходится ждать несколько минут. Я пытался обойти проблему с помощью Session State и кеширования, но поддерживать это решение оказалось слишком сложно.
После этой борьбы возник выбор: изучать JavaScript и React или продолжать сражаться со Streamlit. Для специалиста по данным это не лучший маршрут. Не каждый хочет учить JavaScript только ради небольшого приложения с несколькими кнопками и визуализациями.
Принц на белом — точнее, солнечном — коне
Идея легко встроить Jupyter Notebook или Dash в веб-сайт давно крутилась у меня в голове. Но только поражение в борьбе со Streamlit заставило искать альтернативу. Так я нашёл Solara.
Solara позволяет создавать веб-приложения на чистом Python с помощью ipywidgets или React-подобного API поверх ipywidgets. Приложения работают как внутри Jupyter Notebook, так и самостоятельно — например, вместе с FastAPI.
Компонентный подход Solara упрощает управление состоянием, делает разработку эффективнее, а приложения — удобнее в сопровождении. При этом остаётся доступной вся экосистема Python и привычные библиотеки.
Для меня это означало одно: можно создавать полноценные веб-приложения, не отказываясь от Python и не переходя на другой язык программирования.
Даже сайт документации Solara целиком сделан на Python. Он минималистичен, но полностью функционален. Проект постепенно развивается, поэтому возможностей становится всё больше.
Как Solara управляет состоянием?
В Solara есть два основных подхода: глобальное состояние через solara.reactive и локальное состояние компонента через solara.use_state или solara.use_reactive.
Глобальное состояние: solara.reactive
Что делает: хранит данные в общем пространстве, доступном разным частям приложения.
Когда полезно: когда несколько компонентов должны читать и изменять одни и те же данные.
Ограничение: в большом приложении общий набор данных может стать сложным в сопровождении, а компоненты — слишком зависимыми друг от друга.
Локальное состояние: solara.use_state и solara.use_reactive
Что делает: хранит данные внутри конкретного компонента. Только этот компонент управляет их изменениями.
Когда полезно: для независимых компонентов и больших приложений, где каждая часть отвечает за собственные данные.
Ограничение: если состояние нужно передавать между множеством компонентов, потребуется дополнительная логика.
Выбор зависит от архитектуры приложения и конкретной задачи.
Не только кнопки
Solara — это не только удобное состояние кнопок. В API есть основная функциональность веб-приложений: состояние, хуки, маршрутизация и интерактивные визуализации с Plotly или Matplotlib.
Можно подключать REST API. Обычно рекомендуют FastAPI, но в моих приложениях Flask также работал без проблем. Solara умеет разбирать Jupyter Notebook и позволяет использовать знакомые инструменты Python.
Возможностей много, поэтому Solara выглядит интересным инструментом для специалистов по данным и Python-разработчиков, которые хотят недорого создавать достойные продукты. Посмотреть их можно в разделе примеров.
Если вы немного знакомы с деплоем, приложение можно достаточно просто опубликовать через Railway.
Чем Solara полезна Data Scientist?
- Простая интеграция. Jupyter Notebook и Dash можно превратить в веб-приложение без сложной работы с перезагрузками страницы.
- Разработка вокруг Python. Не нужно сразу изучать JavaScript и отдельный frontend-фреймворк.
- Интерактивные визуализации. Plotly и Matplotlib можно использовать внутри приложения.
- Понятное управление состоянием. Интерфейс способен эффективно реагировать на изменение данных и действия пользователя.
- Совместимость с библиотеками. Можно продолжать использовать привычную экосистему Python.
- Компонентная архитектура. Модульный код проще организовать и поддерживать по мере роста проекта.
Но всё не может быть настолько идеально
Важно помнить, что React, Angular и другие JavaScript-фреймворки намного зрелее Solara. Они многократно проверены в production. Если вы не готовы экспериментировать и принимать риски, это существенный аргумент: основным источником информации о Solara пока остаётся документация, а независимых материалов немного.
Вывод
Solara пока остаётся малоизвестным фреймворком, но у неё есть потенциал потеснить Streamlit в создании веб-приложений для людей, работающих с данными.
Иллюстрации в оригинальной статье выбраны случайно, а автомобиль Solara — шутка, связанная с одинаковым названием. Я не получал денег за упоминание описанных технологий и сайтов и не связан профессионально или лично с командами Solara или Railway. Статья основана на моём опыте работы с данными.