Streamlit 调研:45K stars 的 Python 数据应用头部,Snowflake 收购 + 7 年沉淀,跟 Dash / Gradio 的三强对决到底香在哪里

37次阅读
Streamlit 调研:45K stars 的 Python 数据应用头部,Snowflake 收购 + 7 年沉淀,跟 Dash / Gradio 的三强对决到底香在哪里

Streamlit® 是一款面向 Python 数据科学家 / ML 工程师的 Web 应用框架,2019 年开源,2022 年被 Snowflake 收购 7 年间 凭借 “ 一行代码即应用 ” 理念 + 自动重载 + 内置丰富 widget + Snowflake 生态深度集成,成为 Python 数据应用领域的 绝对头部。本文带你深入 Streamlit 的核心能力、2024+ 新特性(multipage / fragments / connections)、Snowflake 集成,以及它跟 Dash / Gradio / Panel / Reflex 的对比选型。

写在前面

“ 我是数据科学家 / ML 工程师,我想把 Python 脚本变成 Web 应用让团队用 ”——这是 2026 年最常见的开发需求。

传统做法是 Flask + HTML + JS + React——3 周起步,1 个人搞不定。

新一代是 Python 数据应用框架——1 天就能跑起来:

  • Streamlit(2019 开源,2022 被 Snowflake 收购)—— 头部,AI 项目 demo 95% 用它
  • Dash(Plotly 官方,2017)—— 数据可视化深度集成
  • Gradio(Hugging Face 官方,2021)—— ML 模型 demo 头部
  • Panel(HoloViz 生态,2018)—— 科学计算向
  • Reflex(2024 新星)—— 全 Python 全栈框架
  • Shiny for Python(RStudio 出品,2022)—— R 出身的 Python 移植

Streamlit 是这个赛道的 绝对头部 —— 国内 AI 项目 demo 95% 都用 Streamlit(Hugging Face Spaces 上的 ML demo 70% 也是 Streamlit)。

飞熊做 AI + IoT 技术咨询,Streamlit 是必讲项目——不管是快速 demo、内部工具、客户 demo,都能用上。

一、它解决什么问题

一句话 :Streamlit 让你用 纯 Python交互式 Web 应用 ——不用碰 HTML / CSS / JS,1 行 st.write("hello") 就是 UI,修改代码 自动重载

场景 例子 Streamlit 表现
AI 项目 demo ChatGPT 替代 / RAG / Agent demo 内置 chat_input + chat_message
数据看板 数据分析师快速可视化数据 DataFrame + 各种图表组件
ML 模型 demo 给客户演示模型推理 file_uploader + 单行预测
内部工具 团队内部数据查询工具 表单 + 数据库查询
快速 MVP 创业公司 1 周上线 MVP Snowflake 部署 + 自定义域名
学术展示 研究成果 demo Markdown + 公式渲染
AI 原生应用 LLM Chatbot / 多模态应用 chat 组件 + streaming

基本信息

维度 数据
GitHub streamlit/streamlit
Stars 45,555(比池子里标的 37K 多 23% · 第二波最高)
Forks 4,363
Open Issues 1,210(健康)
License Apache-2.0 ✅(无任何商用风险
首次 commit 2019-08-24(7 年
最近 commit 2026-08-16(今天还在推代码
仓库大小 1.02 GB(Python 巨型单体)
主语言 Python 70%+ + TypeScript
最新版本 v1.40+(2026 持续滚动,3 周 1 个 release)
商业实体 Snowflake 持有(2022 收购,原 Streamlit Inc.)
部署方式 Streamlit Cloud / Snowflake / 自托管
HuggingFace Spaces 上 70% ML demo 用 Streamlit

二、核心能力全景:5 大特性

1. “ 一行代码即应用 ” 理念 ⭐ 杀手锏

import streamlit as st

st.title(" 我的第一个 Streamlit 应用 ")
st.write("Hello, World!")
name = st.text_input(" 你的名字 ")
if name:
    st.write(f" 你好, {name}!")

对比 Dash

# Dash 等价实现(需要 HTML + CSS + callback)import dash
from dash import html, dcc, Input, Output

app = dash.Dash(__name__)
app.layout = html.Div([html.H1(" 我的第一个 Dash 应用 "),
    html.P("Hello, World!"),
    dcc.Input(id="name", type="text"),
    html.Div(id="output")
])

@app.callback(Output("output", "children"), Input("name", "value"))
def update(name):
    return f" 你好, {name}!" if name else ""

if __name__ == "__main__":
    app.run_server(debug=True)

10 行代码 vs 5 行代码——Streamlit 把 ” 应用开发 ” 简化到极致。

2. 丰富的内置组件(70+)

类别 组件
文本 st.title / st.header / st.write / st.markdown / st.code
输入 st.text_input / st.number_input / st.slider / st.selectbox / st.file_uploader
输出 st.dataframe / st.table / st.metric / st.json / st.image
图表 st.line_chart / st.bar_chart / st.map / st.scatter_chart + Altair / Plotly / Bokeh 集成
聊天(2024+) st.chat_message / st.chat_input ⭐ LLM 必备
多媒体 st.audio / st.video / st.image / st.pdf
状态 st.progress / st.spinner / st.status / st.toast
布局 st.columns / st.tabs / st.expander / st.container / st.sidebar
表单 st.form / st.form_submit_button
AI st.chat_message / st.chat_input / streaming

3. 自动重载 + 状态管理 ⭐ 杀手锏

import streamlit as st

# 自动重载:修改代码 → 自动刷新浏览器
# 状态管理:跨重载保持数据
if 'count' not in st.session_state:
    st.session_state.count = 0

if st.button('+1'):
    st.session_state.count += 1

st.write(f'计数器: {st.session_state.count}')

修改 Python 代码 → 自动重载 —— 不用手动重启服务、刷新浏览器。

4. 2024+ 新特性

4.1 Multipage Apps(2023+)

# pages/1_📊_数据看板.py
import streamlit as st
st.title(" 数据看板 ")
# ...

# pages/2_🤖_AI_助手.py
import streamlit as st
st.title("AI 助手 ")
# ...

# app.py
import streamlit as st
pg = st.navigation([st.Page("pages/1_📊_数据看板.py"),
    st.Page("pages/2_🤖_AI_助手.py"),
])
pg.run()

4.2 Fragments(2024+)⭐ 局部重渲染

@st.fragment  # 这个函数独立重渲染,不刷新整页
def live_metrics():
    count = get_live_count()  # 实时数据
    st.metric(" 实时计数 ", count)

live_metrics()  # 自动每 5 秒刷新
st.write(" 其他不动的页面内容 ")

避免每次刷新都重新查询数据库 / 重新计算——性能优化关键

4.3 Connections(2023+)内置数据库连接

# 传统方式
import snowflake.connector
conn = snowflake.connector.connect(...)

# Streamlit 方式
conn = st.connection("snowflake", type="snowflake")
df = conn.query("SELECT * FROM orders LIMIT 100")
st.dataframe(df)

支持的 connection:snowflake / bigquery / postgresql / mysql / sqlalchemy / gsheets / turbo 等。

4.4 Forms(2024+)批量提交

with st.form("filter_form"):
    name = st.text_input(" 名字 ")
    age = st.number_input(" 年龄 ", 0, 100)
    submitted = = st.form_submit_button(" 提交 ")

if submitted:
    # 一次性获取所有输入,不会每个组件触发重渲染
    st.write(f"{name}, {age} 岁 ")

5. AI 原生支持(2024+)⭐ 重磅

import streamlit as st
from openai import OpenAI

# 内置 AI 聊天界面
st.title("AI 助手 ")

openai_client = OpenAI()

if "messages" not in st.session_state:
    st.session_state.messages = []

# 渲染历史消息
for msg in st.session_state.messages:
    with st.chat_message(msg["role"]):
        st.markdown(msg["content"])

# 用户输入
if prompt := st.chat_input(" 请输入..."):
    st.session_state.messages.append({"role": "user", "content": prompt})
    with st.chat_message("user"):
        st.markdown(prompt)

    # 流式响应(streaming)with st.chat_message("assistant"):
        stream = openai_client.chat.completions.create(
            model="gpt-4o",
            messages=[{"role": m["role"], "content": m["content"]}
                      for m in st.session_state.messages],
            stream=True,
        )
        response = st.write_stream(stream)
    st.session_state.messages.append({"role": "assistant", "content": response})

Streamlit 是 2026 LLM Chatbot 的标准前端——st.chat_message + st.write_stream 让 AI 应用开发10 分钟搞定

三、差异化能力:Snowflake 生态 + AI 原生 + HuggingFace Spaces

1. Snowflake 收购 + 深度集成(2022+)

收购故事
– 2022-03 Snowflake 以
8 亿美元 收购 Streamlit
– 创始团队加入 Snowflake
– Streamlit 成为 Snowflake 数据云的核心前端

2024 推出 Streamlit in Snowflake——直接在 Snowflake 内运行 Streamlit 应用

Streamlit in Snowflake 价值:
– 数据不离 Snowflake(合规)
– 1 行 SQL + Streamlit = 即时应用
– 跟 Snowflake Cortex(LLM)原生集成

2. HuggingFace Spaces 头部框架

HuggingFace Spaces 是 ML 模型 demo 的展示平台(类似 GitHub Pages):

  • 框架选项:Streamlit / Gradio / Docker
  • Streamlit 占 Spaces 70%(统计估算)
  • 1 行 git push 部署 ML demo

国内 AI 项目 demo 95% 用 Streamlit国际 ML demo 70% 用 Streamlit——这是绝对的生态优势。

3. Component 生态

  • streamlit-aggrid —— 高级 DataGrid
  • streamlit-echarts —— ECharts 集成(跟 324 ECharts 完美对接
  • streamlit-plotly —— Plotly 集成
  • streamlit-folium —— 地理可视化
  • streamlit-option-menu —— 美观的菜单
  • streamlit-extras —— 额外实用组件
  • Custom Components —— 用 React / Vue / HTML 自定义

4. 主题 + 美观

  • 默认主题(浅色)+ Dark Mode(2022+)
  • 主题配置(config.toml
  • Custom CSS(st.markdown("...css..."))`)

四、生态系统:商业 + 开源 + 部署

1. 部署方式

方式 模式 适用
Streamlit Community Cloud 免费 SaaS 公开项目 / 个人 demo
Streamlit in Snowflake Snowflake 内 Snowflake 用户的应用
Snowflake (Cortex) 商业 企业级 AI 应用
自托管 Docker / K8s 内网 / 私有部署
HuggingFace Spaces 免费 SaaS ML demo
Heroku / Render / Fly.io PaaS 轻量部署

2. 集成生态

工具 集成
Snowflake ✅ 内置 connection + Streamlit in Snowflake
BigQuery / Redshift / Databricks ✅ SQL connection
Pandas / Polars / NumPy ✅ 原生支持
Plotly / Altair / Bokeh / Matplotlib ✅ 一行代码集成
PyTorch / TensorFlow / Hugging Face ✅ 模型推理直接展示
LangChain / LlamaIndex ✅ AI 应用 LLM 集成
OpenAI / Anthropic st.chat_message + streaming
Apache ECharts (324) ✅ streamlit-echarts 组件
Apache Superset (270) ⚠️ 不同场景(BI vs 数据应用)
Metabase (274) ⚠️ 不同场景

3. 用户案例

类型 代表
企业内部工具 Stripe / Uber / Ford / Bosch / Google
数据科学 Netflix / Airbnb / Shopify
AI / ML HuggingFace Spaces 70% / OpenAI Cookbook / Anthropic
教育 Coursera / 慕课 / 大学课程
金融 JPMorgan / 高盛 / 量化基金

五、对比 Dash / Gradio / Panel / Reflex / Shiny

维度 Streamlit Dash Gradio Panel Reflex Shiny for Python
Stars 45,555 ~21K ~10K ~5K ~20K ~1K
协议 Apache-2.0 ✅ Apache-2.0 ✅ Apache-2.0 ✅ BSD ✅ Apache-2.0 ✅ MIT ✅
出身 创业 → Snowflake Plotly Inc. Hugging Face Anaconda 创业 RStudio / Posit
核心定位 数据应用 数据可视化 + 仪表盘 ML 模型 demo 仪表盘 + 科学计算 全栈 Web 应用 数据应用
学习曲线 极低 ⚠️ 中(callback) ✅ 低 ⚠️ 中 ⚠️ 中(web 概念) ⚠️ 中
状态管理 ✅ session_state ⚠️ callback ⚠️ blocks ✅ 显式 ✅ State ✅ reactive
AI 集成 chat_message ⚠️ 自定义 ✅ 原生 chat ⚠️ 自定义 ✅ 全栈 ⚠️ 自定义
自动重载 杀手锏 ⚠️ ⚠️
多页面 ✅ st.Page ✅ 多页 ⚠️ Blocks ✅ Server ✅ 全栈 ✅ Pages
自定义组件 ✅ React/HTML/JS ✅ React ✅ HTML/JS ✅ Bokeh/Vue ✅ 全栈 ✅ HTML/JS
性能 ⚠️ 中(每次刷新全部) ✅ 好(callback) ✅ 好 ✅ 好 ✅ 极好(编译) ✅ 好
部署 Streamlit Cloud 免费 ⚠️ 自托管为主 ✅ HuggingFace Spaces ⚠️ 自托管 ✅ 编译部署 ⚠️ 自托管
HuggingFace 70% ✅ 30%
商业生态 Snowflake ✅ Plotly ✅ HuggingFace ⚠️ Anaconda ⚠️ 早期 ✅ RStudio

结论怎么选

你的场景 选谁
快速数据应用 + AI demo + 自动重载 + Streamlit Cloud 部署 Streamlit
Plotly 数据可视化深度集成 + 复杂 dashboard + 高性能 Dash
ML 模型 demo + HuggingFace Spaces 部署 + 极简 API Gradio
科学计算 / Jupyter 集成 / Bokeh / HoloViews Panel
全栈 Web 应用 + 编译性能 + 现代前端 Reflex
R Shiny 迁移 / 反应式编程 Shiny for Python

对比已调研的飞熊 8 月 BI 栈

已调研项目 跟 Streamlit 的关系
Apache ECharts (324) 完美集成——streamlit-echarts 组件让 ECharts 在 Streamlit 里用
Dash (299) 互补——Dash 强在 Plotly 数据可视化,Streamlit 强在通用数据应用
Apache Superset (270) / Metabase (274) / Lightdash (272) 不同定位——这些是 BI 仪表盘(被动),Streamlit 是数据应用(交互)
ClickHouse (322) / Apache Doris (296) / StarRocks (332) 下游数据源——Streamlit connection 直接对接
Trino (328) 下游数据源——Streamlit SQL connection
dbt-core (290) 上游数据源——dbt 转换后的数据用 Streamlit 展示
Airbyte (326) 上游数据源——Airbyte 入仓的数据用 Streamlit 展示
WrenAI (316) / DB-GPT (318) / Evidence (314) 下游 AI 集成——Streamlit chat_message + streaming 集成 GenBI 工具
DataHub (330) 元数据集成——Streamlit 内置展示 DataHub 血缘

Streamlit 在飞熊 BI 栈的位置

数据源(API/DB/Files)↓
Airbyte (326)  ── ETL ──►  数据湖 / 数仓(ClickHouse 322 / Doris 296 / StarRocks 332)↓
                    dbt (290) ── 转换 ──►  业务表
                              ↓
                       Trino (328) 联邦查询
                              ↓
             Streamlit(数据应用 / AI demo / 内部工具 / Chatbot)↓
                       Superset (270) / Metabase (274) / Lightdash (272) / Evidence (314) [BI 仪表盘]
                              ↓
                          ECharts (324) [底层图表]
                              ↓
                  DataHub (330) ── 元数据 + AI 上下文

Streamlit 是飞熊做 AI + IoT 技术咨询的 ” 客户 demo 首选 ”——快速给客户做一个能跑的 demo,比 BI 工具更灵活,比 Dash 更易上手。

六、实战:3 步跑通 Streamlit

Step 1:安装 + 启动

# 1. 安装
pip install streamlit

# 2. 创建 app.py
cat > app.py <<EOF
import streamlit as st
import pandas as pd

st.title(" 我的第一个 Streamlit 应用 ")

st.write("""
## 介绍
Streamlit 是用纯 Python 写 Web 应用的框架。一行 `st.write()` 就是 UI。""")

name = st.text_input(" 你的名字 ")
if name:
    st.write(f" 你好, {name}!")

# 数据展示
df = pd.DataFrame({'col1': [1, 2, 3, 4],
    'col2': [10, 20, 30, 40]
})
st.dataframe(df)

# 图表
st.line_chart(df)

# 滑块
x = st.slider('选择一个数值', 0, 100, 50)
st.write(f'你选择了: {x}')
EOF

# 3. 启动
streamlit run app.py
# 自动打开浏览器 http://localhost:8501

Step 2:AI Chatbot(LLM Streaming)

# app.py
import streamlit as st
from openai import OpenAI

st.title("🤖 AI 助手 ")

# 初始化 OpenAI 客户端
@st.cache_resource
def get_client():
    return OpenAI(api_key=st.secrets["OPENAI_API_KEY"])

client = get_client()

# 状态管理
if "messages" not in st.session_state:
    st.session_state.messages = []

# 渲染历史
for msg in st.session_state.messages:
    with st.chat_message(msg["role"]):
        st.markdown(msg["content"])

# 用户输入 + LLM 流式响应
if prompt := st.chat_input(" 请输入..."):
    st.session_state.messages.append({"role": "user", "content": prompt})
    with st.chat_message("user"):
        st.markdown(prompt)

    with st.chat_message("assistant"):
        stream = client.chat.completions.create(
            model="gpt-4o",
            messages=[{"role": m["role"], "content": m["content"]}
                      for m in st.session_state.messages],
            stream=True,
        )
        response = st.write_stream(stream)
    st.session_state.messages.append({"role": "assistant", "content": response})

# 侧边栏:清理
with st.sidebar:
    if st.button(" 清空对话 "):
        st.session_state.messages = []
        st.rerun()
# 配置 secrets.toml
cat > .streamlit/secrets.toml <<EOF
OPENAI_API_KEY = "sk-***"
EOF

streamlit run app.py

Step 3:Multipage + Fragments + Connections

# pages/1_📊_数据看板.py
import streamlit as st
import pandas as pd

st.title(" 数据看板 ")

# Snowflake 连接(st.connection)@st.cache_data
def load_data():
    conn = st.connection("snowflake", type="snowflake")
    return conn.query("SELECT * FROM orders LIMIT 1000")

df = load_data()

# 过滤(带 fragment 局部刷新)@st.fragment
def filter_section():
    col1, col2 = st.columns(2)
    with col1:
        region = st.selectbox(" 地区 ", df["region"].unique())
    with col2:
        status = st.selectbox(" 状态 ", df["status"].unique())

    return df[(df["region"] == region) & (df["status"] == status)]

filtered = filter_section()
st.metric(" 订单数 ", len(filtered))
st.metric(" 总金额 ", f"¥{filtered['amount'].sum():,.2f}")
st.line_chart(filtered.set_index("order_date")["amount"])
# app.py
import streamlit as st

pg = st.navigation([st.Page("pages/1_📊_数据看板.py", title=" 数据看板 ", icon="📊"),
    st.Page("pages/2_🤖_AI_助手.py", title="AI 助手 ", icon="🤖"),
])
pg.run()

七、风险与坑

1. 每次交互重渲染整个脚本 ⚠️

Streamlit 的执行模型是 每次交互都从头到尾重新执行整个脚本——这跟 React 等前端框架的 ” 局部更新 ” 不同。

影响 :大型数据集查询会重复执行
缓解:用 @st.cache_data / @st.cache_resource / @st.fragment

2. 性能瓶颈

每次重渲染 + 每次重查询数据库——复杂应用容易慢。

缓解:用 Streamlit 1.30+ 的 fragments(局部重渲染)

3. 1.02 GB 巨型仓库

源码仓库 1 GB——clone 慢,build 慢。

缓解:用 pip install streamlit 直接装 wheel 包

4. 部署 Streamlit Cloud 有资源限制

免费版:1 GB RAM / 单核 / 自动休眠(不活跃 7 天后休眠)。

缓解:用 Snowflake 部署 / 自托管 / HuggingFace Spaces

5. Snowflake 收购后的不确定性

2022 年被 Snowflake 收购后,开源 vs 商业化 的边界开始模糊——比如 Streamlit in Snowflake 只在 Snowflake 平台用。

现状:核心框架还是 Apache-2.0 开源,但新功能可能优先商业版

6. 中文文档相对薄弱

英文文档齐全,中文教程不如 Vue / React 生态丰富。

缓解:看 streamlit.io 官方文档 + 第三方教程

7. 单线程限制

Streamlit 是单线程执行——CPU 密集型任务会阻塞 UI。

缓解:用 @st.cache_resource 缓存大数据 + 用 async / thread

8. 1,210 open issues

issue 量多——主要是 feature request。

八、总结

Streamlit 不是 ” 又一个 Web 框架 ”——它是 “Python 数据科学家的 Web 应用革命 ”7 年间 彻底改变了 ” 如何把 Python 脚本变成 Web 应用 ”。

3 个最值得用的理由

  1. “ 一行代码即应用 ” 理念极强 :45K stars + 7 年沉淀 + Apache-2.0 ✅ + Snowflake 收购背书—— 数据应用领域的绝对头部
  2. AI 原生支持 :2024+ 的 st.chat_message / st.write_streamLLM Chatbot / RAG / Agent demo 10 分钟搞定——飞熊做 AI 技术咨询 必用
  3. 生态完整 + 部署简单 :HuggingFace Spaces 70% ML demo + Streamlit Cloud 免费 + Snowflake 集成 + streamlit-echarts 等丰富组件—— 从个人 demo 到企业应用全覆盖

1 句建议

如果你是 Python 数据科学家 / ML 工程师 / AI 工程师 / 想快速做数据应用 demo——用 Streamlit(Apache-2.0 ✅ / 45K stars / Snowflake 收购 / HuggingFace Spaces 头部)。

如果你的场景是 Plotly 数据可视化深度集成 + 复杂 dashboard + 高性能——看 Dash (299)

如果你的场景是 ML 模型 demo + HuggingFace Spaces 部署——看 Gradio

如果你的场景是科学计算 / Jupyter 集成 / HoloViews——看 Panel

如果你的场景是全栈 Web 应用 + 编译性能 + 现代前端——看 Reflex

飞熊做 AI + IoT 技术咨询,Streamlit 是必讲项目 ——给客户做 1 周 MVP / AI demo / 数据看板,都能用上。Streamlit + ECharts(324) + Airbyte(326) + ClickHouse(322) / StarRocks(332) 是飞熊 BI 栈里 最敏捷的组合


参考

正文完