Streamlit 应用开发与部署指南
1. Streamlit 应用开发过程
1.1. 环境准备
-
安装 Python:
- 确保你的计算机上安装了 Python(推荐使用 Python 3.9 及以上版本)。可以从 Python 官网 下载并安装。
-
安装 Streamlit:
-
打开终端或命令提示符,运行以下命令安装 Streamlit:
pip install streamlit
-
-
创建项目文件夹:
- 在你的计算机上创建一个新的文件夹,用于存放你的 Streamlit 应用代码。例如,命名为
my_streamlit_app。
- 在你的计算机上创建一个新的文件夹,用于存放你的 Streamlit 应用代码。例如,命名为
1.2. 编写 Streamlit 应用代码
-
创建 Python 文件:
-
在项目文件夹中创建一个名为
app.py的文件,并在其中编写以下代码:import streamlit as st st.title("我的第一个Streamlit应用") user_input = st.text_input("请输入你的名字:") if user_input: st.write(f"你好,{user_input}!欢迎使用Streamlit!")
-
-
运行应用:
-
在终端中导航到你的项目文件夹,然后运行以下命令:
streamlit run app.py -
运行命令后,终端会显示一个本地 URL(通常是
http://localhost:8501),你可以在浏览器中打开这个链接查看你的应用。
-
-
常用组件和功能:
- 文本输入:
st.text_input用于获取用户输入的文本。 - 按钮:
st.button用于创建按钮,可以触发某些操作。 - 滑动条:
st.slider用于创建滑动条,可以调整数值。 - 选择框:
st.selectbox用于创建下拉选择框。 - 多选框:
st.multiselect用于创建多选框。 - 数据表格:
st.dataframe用于显示数据表格。 - 图表:
st.line_chart、st.bar_chart等用于显示图表。
例如,创建一个包含多个组件的简单应用:
import streamlit as st import pandas as pd st.title("示例应用") # 文本输入 user_input = st.text_input("请输入你的名字:") # 按钮 if st.button("点击我"): st.write(f"你好,{user_input}!") # 滑动条 age = st.slider("选择你的年龄", 0, 100, 25) st.write(f"你的年龄是:{age}") # 选择框 options = ["选项1", "选项2", "选项3"] selected_option = st.selectbox("选择一个选项", options) st.write(f"你选择了:{selected_option}") # 多选框 selected_options = st.multiselect("选择多个选项", options) st.write(f"你选择了:{selected_options}") # 数据表格 data = pd.DataFrame({ "姓名": ["张三", "李四", "王五"], "年龄": [28, 34, 25], "城市": ["北京", "上海", "广州"] }) st.dataframe(data) # 图表 chart_data = pd.DataFrame({ "day": [1, 2, 3, 4, 5, 6, 7], "temperature": [22, 24, 25, 23, 26, 27, 28] }) st.line_chart(chart_data, x="day", y="temperature") - 文本输入:
2. Streamlit 应用部署方式
2.1. 使用 GitHub Actions 部署
-
创建 GitHub 仓库:
- 将你的项目代码推送到 GitHub 仓库。
-
配置 GitHub Actions:
-
在 GitHub 仓库中创建一个
.github/workflows目录,然后在该目录下创建一个deploy.yml文件,内容如下:name: Deploy to Heroku on: push: branches: - main jobs: deploy: runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v2 with: python-version: 3.8 - name: Install dependencies run: | python -m pip install --upgrade pip pip install -r requirements.txt - name: Login to Heroku run: echo ${{ secrets.HEROKU_API_KEY }} | heroku container:login - name: Build and push Docker image run: | heroku container:push web -a your-app-name heroku container:release web -a your-app-name
-
注意:示例中的
actions/checkout@v2与actions/setup-python@v2版本较旧,当前主流为 v4;Python 3.8 已停止官方维护,建议改用受支持的版本(如 3.10+)。原文示例代码保持不变,可按需升级。
-
设置环境变量:
- 在 GitHub 仓库的设置中,添加一个名为
HEROKU_API_KEY的环境变量,值为你的 Heroku API 密钥。
- 在 GitHub 仓库的设置中,添加一个名为
-
访问应用:
- 每次推送代码到
main分支时,GitHub Actions 会自动部署应用到 Heroku。
- 每次推送代码到
2.1.1. 优点
- 自动化:GitHub Actions 可以自动化部署流程,减少手动操作。
- 集成:与 GitHub 高度集成,适合使用 GitHub 进行代码管理的团队。
- 灵活性:可以自定义部署流程,满足不同需求。
2.1.2. 缺点
- 学习曲线:需要了解 GitHub Actions 的配置和使用方法。
- 依赖管理:需要确保所有依赖项正确配置,否则可能影响部署。
2.2. 使用 Streamlit Community Cloud 部署
-
准备代码:
- 确保你的项目文件夹中包含以下文件:
app.py:包含你的 Streamlit 应用代码。requirements.txt:包含所有依赖项。
- 确保你的项目文件夹中包含以下文件:
-
创建 GitHub 仓库:
- 将你的项目代码推送到 GitHub 仓库。
-
配置 Streamlit Community Cloud:
- 注册 Streamlit 账号,访问 Streamlit 官网 注册一个账号。
- 登录到 Streamlit Community Cloud。
- 在控制台中,点击“Create new app”按钮。
- 选择你的 GitHub 仓库。
- 选择要部署的分支(通常是
main或master)。 - 在“Deployment settings”中,确保
app.py文件的路径正确。 - 确保
requirements.txt文件包含所有依赖项。 - 点击“Deploy”按钮,Streamlit Community Cloud 将自动构建和部署你的应用。
-
访问应用:
- 部署完成后,Streamlit Community Cloud 会提供一个 URL,你可以在浏览器中访问这个 URL 查看你的应用。
2.2.1. 优点
- 免费:Streamlit Community Cloud 提供免费的托管服务,适合初学者和小规模应用。
- 简单:配置和部署过程简单,通过 GitHub 集成,可以自动部署代码更新。
- 快速:部署速度快,应用启动迅速。
2.2.2. 缺点
- 资源限制:免费账户资源有限,不适合大型应用。
- 依赖管理:需要确保所有依赖项正确配置,否则可能影响部署。
2.3. 使用 Docker 部署
-
准备代码:
- 确保你的应用代码和
requirements.txt文件在同一目录下。
- 确保你的应用代码和
-
创建
Dockerfile:-
在项目根目录下创建一个名为
Dockerfile的文件,内容如下:FROM python:3.8 WORKDIR /app COPY . . RUN pip install -r requirements.txt EXPOSE 8501 CMD ["streamlit", "run", "app.py", "--server.port=8501", "--server.address=0.0.0.0"]
-
注意:示例使用的基础镜像
python:3.8已停止官方维护,新项目建议改用python:3.12-slim等受支持的镜像。原文示例代码保持不变。
-
构建 Docker 镜像:
-
在终端中运行以下命令构建 Docker 镜像:
docker build -t your-image-name .
-
-
运行 Docker 容器:
-
运行以下命令启动 Docker 容器:
docker run -p 8501:8501 your-image-name
-
-
访问应用:
- 在浏览器中访问
http://localhost:8501查看你的应用。
- 在浏览器中访问
2.3.1. 优点
- 隔离:Docker 提供了环境隔离,确保应用在不同环境中的一致性。
- 可移植性:Docker 镜像可以轻松地在不同环境中部署。
- 资源管理:Docker 提供了资源管理功能,可以优化应用性能。
2.3.2. 缺点
- 复杂性:Docker 的配置和管理较为复杂,适合有经验的开发者。
- 资源开销:运行 Docker 容器会占用一定的系统资源。
2.4. 使用 Heroku 部署
-
准备代码:
-
确保你的应用代码和
requirements.txt文件在同一目录下。requirements.txt文件应包含所有依赖项,例如:streamlit pandas
-
-
创建
Procfile:-
在项目根目录下创建一个名为
Procfile的文件,内容如下:web: streamlit run app.py --server.port=$PORT --server.address=0.0.0.0
-
-
安装 Heroku CLI:
- 下载并安装 Heroku CLI。
-
登录 Heroku:
-
在终端中运行以下命令登录你的 Heroku 账户:
heroku login
-
-
创建 Heroku 应用:
-
在终端中运行以下命令创建一个新的 Heroku 应用:
heroku create your-app-name
-
-
初始化 Git:
-
如果你的项目还没有 Git 仓库,运行以下命令初始化:
git init
-
-
添加文件并提交:
-
将所有文件添加到 Git 并提交:
git add . git commit -m "初始提交"
-
-
连接到 Heroku 仓库:
-
将本地仓库连接到 Heroku 仓库:
heroku git:remote -a your-app-name
-
-
推送代码到 Heroku:
-
将代码推送到 Heroku:
git push heroku main
-
-
访问应用:
- 部署完成后,你可以通过
https://your-app-name.herokuapp.com访问你的应用。
- 部署完成后,你可以通过
2.4.1. 优点
- 低成本:Heroku 提供低成本的入门套餐(免费层已于 2022 年 11 月取消),适合小规模应用。
- 简单:部署过程简单,适合初学者。
- 快速:部署速度快,应用启动迅速。
2.4.2. 缺点
- 资源限制:入门套餐资源有限,不适合大型应用。
- 性能限制:入门套餐的性能可能不足以支持高流量应用。
2.5. 使用 AWS Elastic Beanstalk 部署
-
准备代码:
- 确保你的应用代码和
requirements.txt文件在同一目录下。
- 确保你的应用代码和
-
创建
application.py:- 将你的
app.py重命名为application.py,因为 AWS Elastic Beanstalk 默认查找这个文件。
- 将你的
-
安装 AWS CLI:
- 下载并安装 AWS CLI。
-
配置 AWS CLI:
-
在终端中运行以下命令配置 AWS CLI:
aws configure
-
-
创建 Elastic Beanstalk 应用:
-
在终端中运行以下命令创建新的 Elastic Beanstalk 应用:
eb init -p python-3.8 your-app-name
-
-
创建环境并部署:
-
运行以下命令创建环境并部署应用:
eb create your-env-name
-
-
访问应用:
-
部署完成后,运行以下命令获取应用的 URL:
eb open
-
2.5.1. 优点
- 灵活性:AWS 提供多种服务,可以根据需要进行扩展。
- 性能:性能强大,适合大型应用。
- 安全性:AWS 提供了强大的安全性和合规性。
2.5.2. 缺点
- 复杂性:配置和管理较为复杂,适合有经验的开发者。
- 成本:成本较高,不适合小规模应用。
2.6. 使用 Azure App Service 部署
-
准备代码:
- 确保你的应用代码和
requirements.txt文件在同一目录下。
- 确保你的应用代码和
-
创建
run.sh脚本:-
在项目根目录下创建一个名为
run.sh的文件,内容如下:#!/bin/bash python -m streamlit run app.py --server.port=8000 --server.address=0.0.0.0
-
-
创建 Azure App Service:
- 登录 Azure 门户,创建一个新的 App Service,选择 Python 3.10 或更高版本。
-
上传代码:
- 使用 Azure CLI 或 Azure 门户上传你的代码,包括
app.py、requirements.txt和run.sh。
- 使用 Azure CLI 或 Azure 门户上传你的代码,包括
-
配置启动命令:
-
在 Azure App Service 的设置中,配置启动命令为:
bash run.sh
-
-
访问应用:
- 部署完成后,你可以通过 Azure 提供的 URL 访问你的应用。
2.6.1. 优点
- 集成:与 Azure 生态系统高度集成,适合使用 Azure 服务的开发者。
- 易于管理:Azure 门户提供了丰富的管理工具,方便监控和管理应用。
- 安全性:提供了强大的安全性和合规性。
2.6.2. 缺点
- 成本:成本较高,不适合小规模应用。
- 学习曲线:对于初学者来说,学习曲线可能较陡峭。
3. 总结
通过以上步骤,你可以从开发到部署完整地搭建一个 Streamlit 应用。
无论是选择云服务平台、私有化 VPS 还是 Streamlit Community Cloud,每种方式都有其独特的优点和适用场景。
希望这些详细的步骤能帮助你顺利完成 Streamlit 应用的开发与部署!如果在过程中遇到问题,可以随时查阅相关文档或社区资源。