Streamlit 完整介绍(2026 最新)
Streamlit 是一个程序库,能够让数据科学家快速搭建概念验证(POC)应用以及简易应用。 你无需使用 React.js 这类前端框架,借助这个库就能高效完成全部开发工作。
Streamlit 简要解读
Streamlit 是面向 Python 的 Web 应用开源库,定位就是数据科学家、分析师快速做可视化网页应用、POC 原型。 核心特点正如你所说:不用学习前端(HTML/CSS/JS、React/Vue 等),只写 Python 就能产出交互式网页。
核心优势
开发成本极低常规方案:Python 后端 + React 前端 + 接口联调。 Streamlit:纯 Python,几行代码生成页面、图表、按钮、文件上传组件。
import streamlit as st st.title("数据原型Demo") num = st.slider("选择数值", 0, 100) st.write(f"你选了:{num}")运行命令:
streamlit run app.py,直接打开浏览器访问。- 天然适配数据栈原生兼容 Pandas、NumPy、Matplotlib、Plotly、Altair、PySpark、机器学习模型,非常适合展示数据分析结果、模型演示。
- 自动响应式交互页面组件发生变化时,脚本默认从头重新执行,不需要手动写事件回调,降低交互开发门槛。
适用场景 ✅
- 算法 / 数据分析POC 概念验证、内部演示工具
- 机器学习模型演示、特征调试面板
- 小型内部业务简易工具、报表看板
- 给非技术同事快速交付交互式数据工具
局限性 ⚠️
- 不适合面向大量公网用户的正式生产系统并发性能较弱;页面刷新机制(整段脚本重跑)在复杂逻辑下容易低效。
- 自定义 UI 自由度有限很难做到高度定制化、复杂布局;想要精致商业界面不如前端框架灵活。
- 状态管理比较简陋需要依靠
st.session_state维护状态,大型复杂应用写起来容易混乱。
和你提到的 React 简单对比
- React:专业前端框架,适合正式产品、复杂交互、高并发,学习曲线陡峭,需要前后端分离架构。
- Streamlit:Python 一站式快速原型工具,牺牲一部分性能与定制能力,换取极致开发速度,优先服务数据人员,主打快速验证想法。
一、什么是 Streamlit
Streamlit是一款开源 Python Web 应用框架,主打:纯 Python、零前端(不用 HTML/CSS/JS),几分钟把数据分析脚本变成可分享交互式网页。
- 创立:2019 年,现已被Snowflake收购,持续迭代;
- 目标人群:数据分析师、算法工程师、科研人员、AI 开发者;
- Slogan:Turn data scripts into shareable web apps in minutes.
核心运行机制(重中之重) 用户拖动滑块、点击按钮、输入文字 →整个 Python 脚本从上到下完整重新执行一遍,页面自动刷新。 这是它最简单、同时也是最容易踩坑的底层模型。
二、优缺点
✅ 优点
- 极低学习门槛,API 极度简洁,会 Python 就能上手;
- 原生适配 Pandas、NumPy、Matplotlib、Plotly、PyTorch、LangChain;
- 内置大量 UI 组件:表格、图表、文件上传、聊天框、侧边栏;
- 开发热重载:保存代码浏览器自动刷新;
- 部署方案丰富:本地局域网、Streamlit Cloud 免费托管、服务器 Docker 部署;
- 支持多页面应用、会话状态、缓存、表单、回调函数。
❌ 局限性(适合快速原型,不适合大型生产系统)
- 全脚本重跑模型,不加缓存极易出现重复加载数据、重复推理;
- 默认单进程,不适合超高并发公网正式产品;
- 自定义前端样式麻烦,复杂交互(拖拽、实时协同、复杂动画)实现困难;
- 浏览器每个标签独立会话,会话状态不能跨标签共享;
- 免费云平台有访问时长、内存、休眠限制。
三、典型适用场景
✅ 适合
- 数据探索仪表盘、可视化分析工具
- ML / 大模型 Demo、算法效果演示
- 内部轻量业务工具、科研交互界面
- LangChain / Ollama 本地大模型 Web 聊天前端
- 竞赛、项目快速演示原型
❌ 不适合
- 面向海量用户的商用正式网站
- 需要复杂前端交互、高并发、实时长连接系统
四、快速开始
1. 安装
pip install streamlit # 查看版本 streamlit --version # 官方示例演示 streamlit hello2. 最小示例 app.py
import streamlit as st # 页面全局配置(必须放在脚本最顶部!) st.set_page_config(page_title="Demo", layout="wide") st.title("第一个Streamlit应用") name = st.text_input("请输入名字") num = st.slider("选择数字", min_value=0, max_value=100) st.write(f"你好 {name},选中数字:{num}")3. 启动运行
streamlit run app.py # 指定端口 streamlit run app.py --server.port 8502启动后两个地址:
http://localhost:8501本机访问http://192.168.x.x:8501同一局域网手机 / 其他电脑访问
五、核心 API 分类(常用大全)
1)文本与排版
st.title("大标题") st.header("一级标题") st.subheader("二级标题") st.markdown("**加粗** *斜体* [链接](https://streamlit.io)") st.latex(r"E=mc^2") # 数学公式 st.code("import streamlit as st", language="python") st.divider() # 分割线 st.write("万能输出函数,支持文本、df、图表")2)交互输入组件(Widgets)
# 文本 text = st.text_input("单行输入") area = st.text_area("多行文本") # 数字 val = st.number_input("数字输入", min_value=0, max_value=1000) slide = st.slider("滑动条", 0, 100, 50) # 选择 sel = st.selectbox("下拉单选", ["A","B","C"]) multi = st.multiselect("多选", ["选项1","选项2"]) check = st.checkbox("复选框") radio = st.radio("单选按钮", ["是","否"]) # 文件 upload_file = st.file_uploader("上传文件", type=["csv","xlsx"]) # 按钮与回调 def click_func(): st.info("按钮被点击") st.button("点击我", on_click=click_func)3)布局控制
# 侧边栏:所有组件前面加 st.sidebar st.sidebar.title("侧边设置") s_val = st.sidebar.slider("侧边滑块", 0, 10) # 多列布局 col1, col2 = st.columns([2,1]) # 宽度比例2:1 with col1: st.dataframe(df) with col2: st.metric("指标", value=100, delta=5) # 空白占位(动态刷新内容) placeholder = st.empty() placeholder.info("后续可以覆盖此处内容")4)数据与图表展示
import pandas as pd df = pd.DataFrame({"a":[1,2,3],"b":[4,5,6]}) st.dataframe(df) # 交互式可排序表格 st.table(df) # 静态表格 st.metric("销售额", 999, delta=+33) # 内置简易图表 st.line_chart(df) st.bar_chart(df) st.area_chart(df) # 支持第三方图表 import plotly.express as px fig = px.scatter(df, x="a", y="b") st.plotly_chart(fig)5)消息、等待组件
st.info("提示信息") st.success("成功") st.warning("警告") st.error("错误") # 耗时操作加载动画 with st.spinner("计算中,请稍候..."): import time time.sleep(2) st.success("完成!") progress = st.progress(0)6)聊天界面(新版原生支持)
with st.chat_message("user"): st.write("你好") with st.chat_message("assistant"): st.write("我是AI助手") prompt = st.chat_input("输入消息...")六、三大高级核心机制【进阶必学】
1. 缓存 Cache(解决重复执行痛点)
每次交互重跑脚本,加载大文件、训练、API 请求会重复执行,使用缓存装饰器。
@st.cache_data(最常用)
适合:返回可序列化数据(DataFrame、列表、字符串、API 结果)
@st.cache_data(ttl=3600) # ttl缓存有效期,单位秒 def load_csv(): df = pd.read_csv("data.csv") return df df = load_csv()@st.cache_resource
适合:不可序列化的长连接 / 模型对象数据库连接、LLM 模型、Ollama 实例、大权重模型
@st.cache_resource def get_llm(): from langchain_ollama import OllamaLLM return OllamaLLM(model="qwen2.5") model = get_llm()不要使用旧版
@st.cache,已经废弃!
2. Session State 会话状态(保存变量)
每次重跑脚本,普通变量会重置;st.session_state用于保存当前浏览器会话的变量。
# 初始化 if "count" not in st.session_state: st.session_state.count = 0 if st.button("+1"): st.session_state.count += 1 st.write("计数:", st.session_state.count) # 两种读写方式 st.session_state["key"] = 123 st.session_state.key = 123搭配按钮on_click回调函数,实现复杂状态逻辑。
3. 多页面应用 Multipage
目录结构,自动生成左侧导航栏
main.py # 首页 pages/ 01_数据概览.py 02_模型预测.py 03_聊天机器人.py直接运行streamlit run main.py,自动识别 pages 文件夹。
七、部署方案汇总
方案 1:本地局域网分享(最简单)
启动后把 Network URL 发给局域网内同事。
方案 2:Streamlit Community Cloud(免费首选)
条件:GitHub 账号 流程:
- 代码上传 GitHub 仓库;
- 新建
requirements.txt写明所有依赖; - 登录 share.streamlit.io,关联仓库一键部署;
限制:长时间无访问应用会休眠,内存有限,公开应用无法放敏感密钥。
方案 3:云服务器部署(阿里云 / 腾讯云)
常用方式:
- 直接后台运行 + PM2 进程守护;
- Docker 容器打包;
- 搭配 Nginx 反向代理、域名、HTTPS。
方案 4:Snowflake Streamlit(企业付费)
私有化、私有应用、数据库原生打通,适合企业场景。
八、常见踩坑清单
st.set_page_config()必须脚本第一行,前面不能有任何输出;- 组件 label、key 不能随意修改,否则控件状态重置;
- 循环内动态创建控件务必指定唯一
key=; - 敏感 API 密钥不要硬编码代码,使用环境变量;
- 大文件上传上限默认较小,可修改
.streamlit/config.toml调大; - 不要在循环里大量使用
st.empty()频繁刷新,容易卡顿; - 免费云平台尽量把模型加载放入
@st.cache_resource,避免每次唤醒重加载。
九、同类框架横向简单对比
表格
| 框架 | 定位 | 特点 |
|---|---|---|
| Streamlit | 数据仪表盘、分析原型 | 开发最快,脚本重跑模型,适合数据分析 |
| Gradio | AI 模型演示 | 主打机器学习推理、接口分享,适合模型快速展示 |
| Plotly Dash | 企业交互式仪表板 | 偏传统前端组件,学习曲线更高,并发优于 Streamlit |
| Panel | 灵活数据应用 | 介于 Streamlit 与 Dash 之间,支持异步 |
