1 基本介绍
Streamlit 是一个 Python 库,能够用于使用 Python 创建可交互的、数据驱动的网页应用
pip install streamlit # 安装
streamlit hello # 测试安装是否成功
启动命令:streamlit run your_script.py [-- script args]
快速上手:Streamlit 快速上手
常用技巧:
- 点击页面右上角配置”始终重新运行“,这样代码修改后页面会自动更新
- 针对计算量大的函数可添加
@st.cache
装饰器实现结果缓存 - 通过在
pages
目录中添加.py文件来实现页面的添加和多页面的管理 - 文件的名称会自动成为对应页面的
label
(可用于页面间跳转) - 不同页面之间的Python模块是全局共享的(包含已设定的变量)
- 使用
components.html()
和components.iframe()
显示HTML或Python图表
2 高级功能
- 功能菜单(页面右上角):重启、主题、打印、录频、清除缓存、部署应用
- 按钮行为和示例:
- 按钮适合瞬态信息与单击的进程,不适合嵌套等场景
- 按钮的状态值保存——需要借助
st.session_state
来存储相关信息 - 多个按钮之间存在依赖关系时,也需要借助
st.session_state
来管理每个步骤 - 联动(比如动态添加)其他小组件时,请确保使用索引来保持键的唯一性
st.session_state
的存储信息会提供给当前会话的用户;st.cache_data
的存储信息会提供给所有会话的用户;存储的信息需要先清除才能实现更新
- 缓存 Caching:
st.cache_data
适合缓存数据或大部分Python对象(常用,在不同会话间不共享)st.cache_resource
适合缓存全局资源(比如模型或数据库连接,在不同会话间共享)- 建议在应用中缓存所有的SQL查询或API结果;不同数据源的连接方法:示例
st.cache_data(ttl=3600, max_entries=1000)
,缓存时效为3600 秒,最大缓存条数为1000- 参数
show_spinner
可以用于设定缓存函数激活时的页面显示文本:“正在获取数据...” - 在参数名称前面加上下划线(例如,
_param1
),它就不会用于(也不会影响)缓存 - 缓存机制要求参数满足哈希性,对于个别情况需要使用
hash_funcs
参数单独进行哈希化 - 在处理非常大(亿级)的数据,建议使用
st.cache_resource
(无序列化和反序列化操作)除此之外,缓存机制还可能存在复制、并发、迁移等场景下的注意事项
- 命令行界面:使用
streamlit --help
查看常见命令 - 配置
.streamlit/config.toml
是全局配置文件(优先级低)- 也可以通过
STREAMLIT_*
环境变量来实现配置(优先级中) - 还可以在
streamlit run
时添加相关配置(优先级高)
- 主题:默认 Streamlit Light 主题
- 数据连接:支持常见SDK,简单易用,具备私密安全性
- 数据框 Dataframe
- 基本显示功能:排序、调整大小、全屏、搜索、下载、复制
- 支持数据编辑:添加/删除、复制粘贴、批量编辑、输入验证
- 列的特殊配置:支持选择框、日期、链接、图像、基础图表等类型
- 其他:可处理大型数据集(百万级)、传输限制、服务器/浏览器内存限制
- 局限性:数据编辑仅支持部分类型;数据量大于15w时停用排序功能
- 表单 Forms:必须包含提交按钮;不支持表单的嵌套
- 会话状态:用于不同用户会话之间的变量共享
- 小组件行为:将用户的信息传递到 Python 代码中
- 预发布功能:以
experimental_
为前缀的功能(可能随时更改或删除) - 使用时区:使得日期或时间信息根据用户的时区调整
- 静态文件服务:存储在
./static/
文件夹,可托管和提供小型静态媒体文件 - HTTPs支持:建议使用反向代理或负载平衡来支持自托管和生产用例
- 加密管理:使用 TOML 格式在本地存储密钥(或者存储在外部)
3 第三方组件
- Pygwalker(7K ⭐):类似于Tableau的交互式BI工具
- HiPlot(2K ⭐):轻量级的交互式可视化工具(同上)
- WebRTC (937⭐):目标检测相关的模型演示
- Authenticator(782⭐):身份验证器,添加账号登录功能
- NLU (727⭐):集成很多NLU项目的文本挖掘功能
- streamlit-pandas-profiling(256⭐):表格数据自动化探索
- Stqdm(171⭐):在Steamlit中实现类似tqdm的进度条功能
- streamlit-shap(56⭐):实现针对模型的SHAP分析