streamlit 是什么?

Streamlit 是把 Python 脚本变成交互式数据 Web 应用的开源框架。开发者用 Python 声明文本、表格、图表、输入组件和聊天界面,Streamlit 负责浏览器连接、前端组件和脚本重跑。

⭐ 45,937 Stars 🍴 4,417 Forks Python Apache-2.0 作者: streamlit
来源:github.com/streamlit/streamlit 查看 GitHub 仓库 → 📘 使用教程 →

为什么值得关注

保留教程的依据是官方在 2026-09-15 发布 1.64.0,加入原生 ECharts、异步缓存支持、输入组件新事件模式并修复多项重跑和组件问题。

来源:github.com/streamlit/streamlit/releases/tag/1.64.0

核心功能

纯 Python UI

用 st.* 命令声明文本、控件、数据表、图表、媒体、布局与聊天界面,不要求先写 JavaScript 前端。

来源:github.com/streamlit/streamlit/blob/develop/README.md
脚本重跑

启动本地服务器后,每个浏览器会话通过 WebSocket 连接;用户交互通常触发脚本自上而下重新执行。

来源:docs.streamlit.io/develop/concepts/architecture/architecture
状态与缓存

Session State 保存单个会话状态;st.cache_data 缓存数据结果,st.cache_resource 共享模型或连接等资源,范围和线程安全要求不同。

来源:docs.streamlit.io/develop/concepts/architecture/caching
本地或云端部署

应用可自托管,也可连接 GitHub 仓库部署到免费的 Streamlit Community Cloud;云端资源和休眠规则与本地不同。

来源:docs.streamlit.io/deploy/streamlit-community-cloud

技术架构

streamlit run 启动 Python 服务,浏览器通过 WebSocket 建立会话。服务器为每个活动会话运行脚本并把 Delta 消息发送到前端;组件事件返回后,框架根据事件与 fragment 范围触发重跑。Session State 跟随 WebSocket 会话,cache_data 面向可序列化结果,cache_resource 可跨会话共享资源。前端并不把任意 Python 代码搬到浏览器,数据与模型仍在服务端执行。

来源:docs.streamlit.io/develop/concepts/architecture/architecture

项目知识图谱

知识图谱:项目核心节点(中心)+ 核心功能(内环六边形)+ 关键技术依赖(外环 chip) 纯 Python UI 脚本重跑 状态与缓存 本地或云端部署 streamlit 项目本体 核心功能 关键依赖

技术栈

语言Python >=3.10;前端与协议实现由发行包提供
来源:github.com/streamlit/streamlit/blob/1.64.0/lib/pyproject.toml

快速上手

使用 Python 3.10 以上创建虚拟环境,安装 streamlit==1.64.0。编写只显示标题、滑块和计算结果的 app.py,执行 streamlit run app.py --server.address 127.0.0.1。先用本地无敏感数据确认重跑与 Session State,再加入缓存、上传、数据库或模型。密钥放 .streamlit/secrets.toml 或部署平台密钥管理,并确保该文件不进入版本库。
来源:docs.streamlit.io/get-started/installation/command-line

使用场景

适合数据探索、内部报表、模型演示、审批工具和聊天原型。它的脚本重跑模型便于快速开发,但复杂前端交互、长期后台任务、细粒度 API 服务和高并发产品需要额外架构。上传文件、查询参数、用户输入和自定义 HTML 都应按不可信输入处理。

来源:github.com/streamlit/streamlit/blob/develop/README.md

优势与局限

优势

  • 用少量 Python 就能建立数据组件和交互页面
  • 表格、图表、布局、聊天、认证与测试接口覆盖常见原型需求
  • Session State、fragment 与两类缓存可控制重跑成本
  • 可本地运行、自托管或使用免费的 Community Cloud

局限

  • 每次交互可能重跑脚本,副作用和昂贵计算必须显式控制
  • cache_resource 可跨会话共享对象,线程安全和用户数据隔离由应用负责
  • Session State 绑定 WebSocket,连接重置后不能当作持久数据库
  • 默认开发服务不等于完整生产边界,对外部署仍需认证、TLS、限流和日志治理
  • 高度定制前端、后台队列和复杂 API 往往需要其他框架配合
来源:docs.streamlit.io/develop/concepts/architecture/caching

最新版本

官方最新 GitHub Release 是 1.64.0,发布于 2026-09-15,对应提交 bab1da9。该版加入 st.echarts_chart、异步感知 cache_data/cache_resource、多个控件的 on_change=ignore 或 live 参数,并修复重跑、Altair、PyDeck、下载文件名和 Custom Components v2 事件等问题。

来源:github.com/streamlit/streamlit/releases/tag/1.64.0

实测与证据

status: official_source_checked_not_installed_or_run  |  checked_at: 2026-09-23  |  environment: 核对官方 README、架构/运行/缓存/Community Cloud 文档、1.64.0 pyproject 与 GitHub Release;未安装包、未启动应用、未上传数据或部署云端  |  limitations: 未验证本机浏览器会话、重跑、缓存一致性、上传内存、认证、性能、Community Cloud 限额或生产部署  |  observed_output: 官方最新 Release 为 1.64.0,发布于 2026-09-15,对应提交 bab1da9;包要求 Python >=3.10;该版新增 st.echarts_chart 和异步感知的 cache_data/cache_resource

来源:github.com/streamlit/streamlit/releases/tag/1.64.0

同类项目对比

相比 Gradio,Streamlit 更偏完整的数据应用,提供表格、布局、导航、Session State、缓存和多页结构;Gradio 以 Python 函数或模型为中心,Interface 与 Blocks 更适合快速做输入输出演示,并可生成可调用 API。做数据仪表盘和分析工作流时先看 Streamlit;包装单个模型或函数演示时,Gradio 通常步骤更少。

来源:github.com/streamlit/streamlit (1) · github.com/gradio-app/gradio (2)

总结评价

Streamlit 适合用 Python 快速制作数据应用和模型原型。先锁定 1.64.0,用一个本地小应用理解重跑、状态与两类缓存,再接数据和认证;对外部署时按 Web 服务处理网络、上传、密钥与用户隔离。

来源:docs.streamlit.io/develop/concepts/architecture/run-your-app

常见问题

Streamlit 为什么点击控件后会重新执行代码?

浏览器把组件事件发回服务器后,Streamlit 通常从上到下重跑脚本并重新生成页面。用 Session State 保存会话值,用 fragment 缩小重跑范围,用缓存避免重复的数据或资源初始化。

st.cache_data 和 st.cache_resource 应该怎么选?

cache_data 适合查询结果和可序列化数据,会向调用方返回副本;cache_resource 适合模型、数据库连接等共享对象。共享资源必须线程安全,不能混入某个用户的私有状态。

Streamlit 的 Session State 能替代数据库吗?

不能。Session State 跟随当前 WebSocket 会话,刷新、重连或服务重启都可能改变生命周期。需要审计、跨设备或长期保存的数据应写入正式存储。

本地 Streamlit 应用可以直接开放到公网吗?

不要把开发命令直接当生产部署。先绑定 127.0.0.1;对外提供时增加认证、TLS、反向代理、请求和上传限制、依赖锁定、日志脱敏及进程隔离。

Streamlit Community Cloud 是付费升级吗?

官方当前把 Community Cloud 描述为免费服务。它会连接 GitHub 并运行应用,资源、休眠、隐私和可用性规则与自托管不同;企业 Snowflake 路径应另行评估。

资料与核验范围
本文依据项目公开资料整理。版本、安装命令和功能边界可能随上游更新,请以所列来源和项目当前版本为准。 资料核对时间: 2026-09-23 13:55.

参考材料:README、GitHub API、依赖文件