Streamlit 开发环境搭建指南:基于 uv 的依赖管理、虚拟环境与项目初始化实战
2026/9/19 13:19:38 网站建设 项目流程

Streamlit 开发环境搭建指南:基于 uv 的依赖管理、虚拟环境与项目初始化实战

【免费下载链接】streamlitStreamlit — A faster way to build and share data apps.项目地址: https://gitcode.com/gh_mirrors/st/streamlit

Streamlit 是当前仓库(Streamlit,版本 1.64.0)提供的 Python Web 应用框架,核心目标是用最少的代码把数据脚本变成可交互的 Web 应用。本文围绕仓库内置的开发技能文档 environment-setup.md 展开,系统讲解 Streamlit 项目的环境搭建、依赖管理、目录组织与运行方式:新项目优先使用 uv 自动创建隔离环境,始终锁定最新版 Streamlit,并遵循streamlit_app.py单一入口的工程惯例。读完本文,你将能够独立完成一个 Streamlit 项目的从零初始化、依赖增删、版本核对与多页应用结构规划。

环境管理总原则:沿用项目现有方案,新项目默认 uv

在动手搭建环境前,先明确一个基本判断:Streamlit 本身不强制任何包管理工具。文档给出的核心原则是:如果项目已经使用 pip、poetry、conda 等依赖管理方案,就继续沿用,避免在同一项目里混入多套工具链;只有从零开始新项目,且本机已安装 uv 时,才把 uv 作为默认选择——它速度快、可靠,并且会自动创建隔离的虚拟环境。

uv 未被安装时,文档明确要求:先询问用户是否安装 uv,而不是擅自改动用户机器的全局环境。这一点与仓库中 AI 技能(SKILL.md)"Step 4: Check Running Apps and Offer to Run" 的交互风格一致:技能只负责给出建议与命令,是否执行由用户确认。

从仓库根目录的 uv.lock 可以看出,Streamlit 官方仓库自身也使用 uv 管理依赖并提交锁文件,用于保证 CI 与本地环境的可复现构建。这为"uv 作为默认工具"提供了项目内部的实践佐证。

关键前提:始终使用最新版 Streamlit

文档用一个专门的CRITICAL小节强调:依赖声明中必须指定最新版 streamlit。原因在于,本技能库中大量功能和用法依赖较新版本,旧版本会直接导致以下特性报错:

  • Material 图标语法(:material/icon_name:);
  • st.pills()st.segmented_control()等新一代选择类控件;
  • 现代缓存装饰器(@st.cache_data/@st.cache_resource);
  • st.navigationst.Page等多页应用导航 API。

因此,无论是新建项目还是在既有项目里修复问题,第一步都应是检查并升级 streamlit 版本。这与仓库现状一致:当前 lib/pyproject.toml 中 streamlit 的版本为1.64.0,且requires-python = ">=3.10",Python 3.10~3.14 均被官方分类器声明支持。

实践中可用如下命令核对已安装版本:

streamlit version uv pip show streamlit | grep Version

快速开始:纯虚拟环境方案(uv venv)

对于简单应用,文档推荐只创建虚拟环境、不引入完整工程文件的轻量路线:

uv venv source .venv/bin/activate # Windows 下为 .venv\Scripts\activate uv pip install streamlit

激活后直接安装最新版 streamlit,然后运行:

streamlit run streamlit_app.py

这一命令会启动本地开发服务器(默认端口 8501)并在浏览器打开应用。从仓库入口源码看,streamlit run的 CLI 实现位于streamlit.web.clipython -m streamlit run ...与直接调用streamlit走的是同一条主流程(见 lib/streamlit/main.py),因此在 IDE 配置运行目标时,python -m streamlit run app.pystreamlit run app.py等价。

完整项目方案:uv init 与可复现构建

当项目规模较大、或需要多人协作的可复现环境时,文档推荐走完整的工程化流程:

uv init my-streamlit-app cd my-streamlit-app uv add streamlit

uv init会一次性生成三样东西:

生成物作用
pyproject.toml声明项目元信息与依赖清单
uv.lock锁定精确依赖版本,保证构建可复现
.venv/隔离的虚拟环境,随项目创建

随后通过uv run运行应用,无需手动激活环境:

uv run streamlit run streamlit_app.py

uv run会自动解析pyproject.toml中的依赖并确保环境就绪,这正是 cli.md 中"推荐使用uv run"的原因:它自动管理虚拟环境、从pyproject.toml解析安装依赖、跨机器保证环境一致,并且省去了手动 activate/deactivate 的步骤。

运行选项:仅在确有必要时设置

文档的态度非常明确:避免设置运行选项,除非你有具体理由。唯一的示例是 CI/自动化场景:

streamlit run streamlit_app.py --server.headless true # 仅用于自动化/CI 环境

这一建议背后有源码依据。在 lib/streamlit/config.py 中,server.headless的默认值本身已具备智能判断:

@_create_option("server.headless", type_=bool) def _server_headless() -> bool: """If false, will attempt to open a browser window on start. Default: false unless (1) we are on a Linux box where DISPLAY is unset, or (2) we are running in the Streamlit Atom plugin. """ return ( env_util.IS_LINUX_OR_BSD and not os.getenv("DISPLAY") and not os.getenv("WAYLAND_DISPLAY") )

也就是说,在无图形界面的 Linux 服务器(如 CI 环境)上,headless默认即为 true,无需显式指定;只有在需要强制抑制浏览器弹出提示时才应手动设置。这也解释了文档"不要随意加选项"的用意:Streamlit 已针对常见场景做了合理默认。

若确需在命令行覆盖配置,语法遵循--<section>.<option>=<value>模式,且必须放在脚本名之后,例如:

streamlit run app.py --server.port=8080 --server.runOnSave=true

其中server.runOnSave(文件变更自动重跑,默认 false,见 config.py)与client.showErrorDetails等均可通过此方式临时覆盖。更推荐的做法是持久化到.streamlit/config.toml,并遵循 cli.md 记载的优先级顺序:命令行参数 > 环境变量(STREAMLIT_*)> 脚本级配置 > 项目级配置 > 全局配置。

添加依赖:两种方式对应两种项目形态

依赖安装方式与项目初始化方式一一对应:

# 纯 venv 方案 uv pip install plotly snowflake-connector-python # 完整工程方案(uv init 之后) uv add plotly snowflake-connector-python

uv add的优势在于它会同步写入pyproject.toml并更新uv.lock,让依赖变更可追溯、可复现;uv pip install则只作用于当前虚拟环境,适合临时验证。

项目结构:保持简单,按需扩展

文档给出的默认目录结构极其克制:

my-streamlit-app/ ├── .venv/ └── streamlit_app.py

只有在确实需要时才逐步追加:

追加项适用场景
app_pages/多页应用(配合st.navigation+st.Page
.streamlit/config.toml需要自定义主题或服务端设置
.streamlit/secrets.toml使用密钥/凭据,必须加入.gitignore
pyproject.toml使用uv init做可复现构建

关于 secrets 的这条要求与 SKILL.md 的最佳实践一致:凭据绝不硬编码进应用代码,也绝不把.streamlit/secrets.toml提交进版本库。

命名约定与主模块职责

主入口文件统一命名为streamlit_app.py——这正是streamlit run无参数调用时的默认查找目标(见 cli.md 的 entrypoint 规则表)。主模块的职责按应用形态划分:

  • 使用导航(多页)时streamlit_app.py充当路由器,负责定义页面并驱动它们运行;
  • 无导航(单页)时:它就是承载主内容的首页。

仓库内置的仪表盘模板可作为直观参照:模板入口统一命名为streamlit_app.py,例如 dashboard-metrics/streamlit_app.py,其中st.set_page_config()@st.cache_data(ttl=...)加载器、@st.fragment(parallel=True)卡片等均体现了当前版本 API 的推荐用法。

pyproject.toml 完整示例与解析

文档给出的可直接套用的pyproject.toml

[project] name = "my-streamlit-app" version = "0.1.0" requires-python = ">=3.11" dependencies = [ "streamlit", "plotly>=5.0.0", "snowflake-connector-python>=3.0.0", ] [tool.uv] dev-dependencies = [ "pytest>=8.0.0", ]

几点实战说明:

  • streamlit不写版本下限,等价于"始终装最新版",与文档的 CRITICAL 要求吻合;若项目对稳定性敏感,也可写成带下限的区间,例如streamlit>=1.40.0
  • requires-python应按团队实际 Python 版本设定:文档示例为>=3.11,而仓库自身支持>=3.10(见 lib/pyproject.toml);
  • [tool.uv] dev-dependencies是 uv 的约定小节,把 pytest 等开发依赖与运行时依赖分离,uv sync时会按需安装。

仓库内置模板的声明方式与此一脉相承,例如 dashboard-metrics/pyproject.toml 中依赖streamlitaltair>=5.5.0numpy>=1.26.0pandas>=2.2.3,并声明requires-python = ">=3.10",是"最小可用工程文件"的官方范本。

版本核对与升级检查清单

综合文档与仓库信息,一个规范的 Streamlit 环境初始化流程可归纳为:

  1. 沿用既有依赖管理工具(pip/poetry/conda),新项目在已装 uv 时默认用 uv;
  2. 检查并确保streamlit为最新版本,streamlit versionuv pip show streamlit核对;
  3. 简单应用走uv venv+uv pip install streamlit,正式项目走uv init+uv add streamlit
  4. 主文件统一命名streamlit_app.py,用streamlit run(或uv run streamlit run)启动;
  5. 除非确有原因(如 CI 强制 headless),不为启动命令附加多余配置选项;
  6. 结构保持精简,仅在需要多页、主题、密钥或可复现构建时逐项追加对应文件。

小结

本文以仓库技能文档 environment-setup.md 为骨架,结合 lib/pyproject.toml、config.py、main.py 及模板工程等仓库证据,完整覆盖了 Streamlit 环境搭建的决策树:从"沿用现有方案还是引入 uv",到"快速 venv 还是完整工程",再到"何时才该加运行选项"。无论你是首次接触 Streamlit 的新手,还是需要为团队固化脚手架的老手,遵循"最新版本 + uv 隔离环境 + 精简结构 + 约定入口"这套组合,都能获得稳定、可复现且贴近官方推荐的开发体验。

【免费下载链接】streamlitStreamlit — A faster way to build and share data apps.项目地址: https://gitcode.com/gh_mirrors/st/streamlit

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询