Все статьи
·6 мин

Solara против Streamlit: новый инструмент для Data Science-приложений

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

SolaraStreamlitPythonData ScienceWeb development
Solara против Streamlit: новый инструмент для Data Science-приложений

В жизни каждого 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. Статья основана на моём опыте работы с данными.

Источник и оригинал

Это русская версия авторской статьи Павла Стасиньски. Оригинал опубликован на Medium.

Читать оригинал на Medium