Открыть сервисСервис

Streamlit: фреймворк для веб-приложений на Python

Streamlit — это открытая библиотека (фреймворк) на языке программирования Python с открытым исходным кодом, предназначенная для быстрого создания интерактивных веб-приложений для задач науки о данных и машинного обучения. Ключевая особенность Streamlit заключается в том, что разработка интерфейса происходит исключительно на Python: не требуется писать HTML, CSS или JavaScript, а обновление данных и перерисовка страницы выполняются автоматически при изменении исходного кода или пользовательском взаимодействии. Первый публичный релиз фреймворка состоялся в октябре 2019 года, а его создателем является Аднан Сиддики (Adnan Siddiqi).

История и происхождение

Проект был основан в 2019 году. Его появление связывают с потребностью специалистов по данным, которые тратили значительное время на создание демонстрационных интерфейсов для своих моделей и аналитических отчётов. Традиционные веб-технологии требовали глубоких знаний фронтенд-разработки, что замедляло итерации в исследованиях. Streamlit решил эту проблему, предложив модель исполнения снизу вверх: скрипт запускается сверху вниз, и каждый раз, когда пользователь взаимодействует с виджетом (нажимает кнопку, двигает ползунок), весь скрипт выполняется заново. Такой подход позволяет легко поддерживать состояние приложения в актуальном состоянии без сложной логики синхронизации.

В 2022 году компания Streamlit была приобретена корпорацией Snowflake, которая специализируется на облачных хранилищах данных. После приобретения развитие фреймворка продолжилось, а его интеграция с экосистемой Snowflake была усилена. Несмотря на это, Streamlit остаётся полностью открытым проектом, распространяемым под лицензией Apache 2.0, что допускает его бесплатное использование, включая коммерческие проекты.

Архитектура и принцип работы

Работа Streamlit строится вокруг концепции «сервер-скрипт». При запуске приложения через командную строку (streamlit run app.py) запускается локальный веб-сервер, который связывает браузер пользователя с выполняющимся Python-скриптом.

Модель исполнения

Основой является мгновенный перезапуск скрипта (immediate rerun). Каждое действие пользователя — клик, ввод текста, изменение значения на слайдере — отправляет сигнал на сервер, после чего сервер выполняет скрипт заново. Это делает логику приложения линейной и предсказуемой. Для обработки данных, которые не должны пересчитываться при каждом перезапуске (например, загрузка большого файла или дорогостоящее машинное обучение), используется декоратор @st.cache_data. Он кэширует результат выполнения функции на основе её входных аргументов, что значительно ускоряет работу приложения при повторных взаимодействиях.

Сеансы и состояние

Для хранения данных между перезапусками скрипта (например, значений, введённых пользователем на предыдущем шаге) используется объект st.session_state. Это словарь, который сохраняет значения переменных в рамках одного браузерного сеанса. Данная механика позволяет создавать многошаговые формы и мастеры, не прибегая к внешним базам данных.

Основные компоненты и возможности

Библиотека предоставляет широкий набор встроенных элементов интерфейса, которые делятся на несколько категорий.

Отображение данных

Для вывода информации используются функции st.write (универсальный вывод, определяющий тип данных автоматически), st.dataframe (интерактивная таблица с сортировкой и поиском на основе библиотеки Pandas) и st.table (статическая таблица). Поддерживается вывод графиков, созданных в Matplotlib, Plotly, Altair, Bokeh и Seaborn, а также изображений, аудио и видеофайлов.

Виджеты ввода

Streamlit включает стандартные элементы управления: кнопки (st.button), флажки (st.checkbox), радиокнопки (st.radio), выпадающие списки (st.selectbox), ползунки (st.slider), поля для ввода текста (st.text_input) и чисел (st.number_input), а также виджеты для загрузки файлов (st.file_uploader). Значения, выбранные пользователем, автоматически передаются в скрипт как переменные.

Мультимедиа и макет

Для структурирования страницы используются боковая панель (st.sidebar), вкладки (st.tabs), раскрывающиеся секции (st.expander) и колонки (st.columns). Это позволяет создавать интерфейсы уровня профессиональных дашбордов без написания HTML-разметки. Также поддерживается встраивание внешнего контента через st.markdown (с поддержкой синтаксиса Markdown и LaTeX) и st.html (для прямого ввода HTML).

Прогресс и состояние

Для отображения динамики процессов предусмотрены индикаторы выполнения (st.progress), статусные сообщения (st.success, st.warning, st.error) и «тосты» (st.toast) — всплывающие уведомления. Функция st.spinner позволяет показать анимацию загрузки во время выполнения длительных операций.

Экосистема и интеграции

Streamlit имеет развитую экосистему, включающую несколько ключевых компонентов.

Streamlit Cloud

Официальный облачный сервис от создателей фреймворка. Он позволяет разворачивать приложения бесплатно (с ограничениями по ресурсам) или на платных тарифах. Развёртывание происходит путём подключения репозитория GitHub: сервис автоматически устанавливает зависимости из файла requirements.txt и предоставляет публичную ссылку на приложение. Это делает Streamlit одним из самых простых способов демонстрации моделей машинного обучения в интернете.

Streamlit Components

Механизм для создания пользовательских элементов управления на JavaScript. Если стандартных виджетов недостаточно, разработчики могут создать собственный компонент, который будет взаимодействовать с Python-кодом через специальный API. Существует библиотека готовых сторонних компонентов, расширяющих функциональность (например, календари, 3D-визуализации, видеоплееры).

Интеграция с библиотеками

Фреймворк тесно интегрирован с основными библиотеками Python для анализа данных: Pandas, NumPy, Scikit-learn, PyTorch и TensorFlow. Для подключения к базам данных используются стандартные коннекторы (например, SQLAlchemy), а для работы с облачными сервисами — соответствующие SDK.

Применение

Основные сценарии использования Streamlit включают:

  • Создание прототипов (MVP) — быстрая проверка гипотез и демонстрация возможностей алгоритмов заказчику или коллегам.
  • Внутренние аналитические дашборды — инструменты для мониторинга метрик, визуализации KPI и исследования данных в компаниях.
  • Демонстрация моделей машинного обучения — предоставление пользователям интерфейса для загрузки данных и получения предсказаний в реальном времени.
  • Образовательные проекты — интерактивные учебные пособия по статистике, программированию и анализу данных.
  • Генерация отчётов — создание внутренних порталов с автоматическим обновлением данных из внешних источников.

Достоинства и ограничения

К преимуществам Streamlit относят низкий порог входа, скорость разработки, встроенную поддержку кэширования и автоматическую перерисовку интерфейса. Однако существуют и ограничения. Архитектура полного перезапуска скрипта при каждом взаимодействии может быть неэффективной для очень сложных приложений с тяжёлыми вычислениями (частично решается кэшированием). Также фреймворк менее гибок, чем специализированные фронтенд-фреймворки (например, React или Vue.js), что затрудняет создание нестандартных, высоконагруженных пользовательских интерфейсов. Для задач, требующих строгой кастомизации внешнего вида или сложной клиентской логики, разработчики часто выбирают альтернативы, такие как Dash от Plotly или Gradio.