Streamlit 应用开发与部署指南

1- Streamlit 应用开发与部署指南

1.1- Streamlit 应用开发过程

1.1.1- 环境准备

  1. 安装 Python

    • 确保你的计算机上安装了 Python(推荐使用 Python 3.7 及以上版本)。可以从 Python官网 下载并安装。
  2. 安装 Streamlit

    • 打开终端或命令提示符,运行以下命令安装 Streamlit:

      pip install streamlit
      
  3. 创建项目文件夹

    • 在你的计算机上创建一个新的文件夹,用于存放你的 Streamlit 应用代码。例如,命名为 my_streamlit_app

1.1.2- 编写 Streamlit 应用代码

  1. 创建 Python 文件

    • 在项目文件夹中创建一个名为 app.py 的文件,并在其中编写以下代码:

      import streamlit as st
      
      st.title("我的第一个Streamlit应用")
      user_input = st.text_input("请输入你的名字:")
      
      if user_input:
          st.write(f"你好,{user_input}!欢迎使用Streamlit!")
      
  2. 运行应用

    • 在终端中导航到你的项目文件夹,然后运行以下命令:

      streamlit run app.py
      
    • 运行命令后,终端会显示一个本地 URL(通常是 http://localhost:8501),你可以在浏览器中打开这个链接查看你的应用。

  3. 常用组件和功能

    • 文本输入st.text_input 用于获取用户输入的文本。
    • 按钮st.button 用于创建按钮,可以触发某些操作。
    • 滑动条st.slider 用于创建滑动条,可以调整数值。
    • 选择框st.selectbox 用于创建下拉选择框。
    • 多选框st.multiselect 用于创建多选框。
    • 数据表格st.dataframe 用于显示数据表格。
    • 图表st.line_chartst.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")
    

1.2- Streamlit 应用部署方式

1.2.1- 使用 GitHub Actions 部署

  1. 创建 GitHub 仓库

    • 将你的项目代码推送到 GitHub 仓库。
  2. 配置 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
      
  3. 设置环境变量

    • 在 GitHub 仓库的设置中,添加一个名为 HEROKU_API_KEY 的环境变量,值为你的 Heroku API 密钥。
  4. 访问应用

    • 每次推送代码到 main 分支时,GitHub Actions 会自动部署应用到 Heroku。

优点

  • 自动化:GitHub Actions 可以自动化部署流程,减少手动操作。
  • 集成:与 GitHub 高度集成,适合使用 GitHub 进行代码管理的团队。
  • 灵活性:可以自定义部署流程,满足不同需求。

缺点

  • 学习曲线:需要了解 GitHub Actions 的配置和使用方法。
  • 依赖管理:需要确保所有依赖项正确配置,否则可能影响部署。

1.2.2- 使用 Streamlit Community Cloud 部署

  1. 准备代码

    • 确保你的项目文件夹中包含以下文件:
      • app.py:包含你的 Streamlit 应用代码。
      • requirements.txt:包含所有依赖项。
  2. 创建 GitHub 仓库

    • 将你的项目代码推送到 GitHub 仓库。
  3. 配置 Streamlit Community Cloud

    • 注册 Streamlit 账号,访问 Streamlit官网 注册一个账号。
    • 登录到 Streamlit Community Cloud
    • 在控制台中,点击 “Create new app” 按钮。
    • 选择你的 GitHub 仓库。
    • 选择要部署的分支(通常是 mainmaster)。
    • 在 “Deployment settings” 中,确保 app.py 文件的路径正确。
    • 确保 requirements.txt 文件包含所有依赖项。
    • 点击 “Deploy” 按钮,Streamlit Community Cloud 将自动构建和部署你的应用。
  4. 访问应用

    • 部署完成后,Streamlit Community Cloud 会提供一个 URL,你可以在浏览器中访问这个 URL 查看你的应用。

优点

  • 免费:Streamlit Community Cloud 提供免费的托管服务,适合初学者和小规模应用。
  • 简单:配置和部署过程简单,通过 GitHub 集成,可以自动部署代码更新。
  • 快速:部署速度快,应用启动迅速。

缺点

  • 资源限制:免费账户资源有限,不适合大型应用。
  • 依赖管理:需要确保所有依赖项正确配置,否则可能影响部署。

1.2.3- 使用 Docker 部署

  1. 准备代码

    • 确保你的应用代码和 requirements.txt 文件在同一目录下。
  2. 创建 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"]
      
  3. 构建 Docker 镜像

    • 在终端中运行以下命令构建 Docker 镜像:

      docker build -t your-image-name .
      
  4. 运行 Docker 容器

    • 运行以下命令启动 Docker 容器:

      docker run -p 8501:8501 your-image-name
      
  5. 访问应用

    • 在浏览器中访问 http://localhost:8501 查看你的应用。

优点

  • 隔离:Docker 提供了环境隔离,确保应用在不同环境中的一致性。
  • 可移植性:Docker 镜像可以轻松地在不同环境中部署。
  • 资源管理:Docker 提供了资源管理功能,可以优化应用性能。

缺点

  • 复杂性:Docker 的配置和管理较为复杂,适合有经验的开发者。
  • 资源开销:运行 Docker 容器会占用一定的系统资源。

1.2.4- 使用 Heroku 部署

  1. 准备代码

    • 确保你的应用代码和 requirements.txt 文件在同一目录下。requirements.txt 文件应包含所有依赖项,例如:

      streamlit
      pandas
      
  2. 创建 Procfile

    • 在项目根目录下创建一个名为 Procfile 的文件,内容如下:

      web: streamlit run app.py --server.port=$PORT --server.address=0.0.0.0
      
  3. 安装 Heroku CLI

  4. 登录 Heroku

    • 在终端中运行以下命令登录你的 Heroku 账户:

      heroku login
      
  5. 创建 Heroku 应用

    • 在终端中运行以下命令创建一个新的 Heroku 应用:

      heroku create your-app-name
      
  6. 初始化 Git

    • 如果你的项目还没有 Git 仓库,运行以下命令初始化:

      git init
      
  7. 添加文件并提交

    • 将所有文件添加到 Git 并提交:

      git add .
      git commit -m "初始提交"
      
  8. 连接到 Heroku 仓库

    • 将本地仓库连接到 Heroku 仓库:

      heroku git:remote -a your-app-name
      
  9. 推送代码到 Heroku

    • 将代码推送到 Heroku:

      git push heroku main
      
  10. 访问应用

    • 部署完成后,你可以通过 https://your-app-name.herokuapp.com 访问你的应用。

优点

  • 免费:Heroku 提供免费的开发者账户,适用于小规模应用。
  • 简单:部署过程简单,适合初学者。
  • 快速:部署速度快,应用启动迅速。

缺点

  • 资源限制:免费账户资源有限,不适合大型应用。
  • 性能限制:免费账户的性能可能不足以支持高流量应用。

1.2.5- 使用 AWS Elastic Beanstalk 部署

  1. 准备代码

    • 确保你的应用代码和 requirements.txt 文件在同一目录下。
  2. 创建 application.py

    • 将你的 app.py 重命名为 application.py,因为 AWS Elastic Beanstalk 默认查找这个文件。
  3. 安装 AWS CLI

  4. 配置 AWS CLI

    • 在终端中运行以下命令配置 AWS CLI:

      aws configure
      
  5. 创建 Elastic Beanstalk 应用

    • 在终端中运行以下命令创建新的 Elastic Beanstalk 应用:

      eb init -p python-3.8 your-app-name
      
  6. 创建环境并部署

    • 运行以下命令创建环境并部署应用:

      eb create your-env-name
      
  7. 访问应用

    • 部署完成后,运行以下命令获取应用的 URL:

      eb open
      

优点

  • 灵活性:AWS 提供多种服务,可以根据需要进行扩展。
  • 性能:性能强大,适合大型应用。
  • 安全性:AWS 提供了强大的安全性和合规性。

缺点

  • 复杂性:配置和管理较为复杂,适合有经验的开发者。
  • 成本:成本较高,不适合小规模应用。

1.2.6- 使用 Azure App Service 部署

  1. 准备代码

    • 确保你的应用代码和 requirements.txt 文件在同一目录下。
  2. 创建 run.sh 脚本

    • 在项目根目录下创建一个名为 run.sh 的文件,内容如下:

      #!/bin/bash
      python -m streamlit run app.py --server.port=8000 --server.address=0.0.0.0
      
  3. 创建 Azure App Service

    • 登录 Azure 门户,创建一个新的 App Service,选择 Python 3.10 或更高版本。
  4. 上传代码

    • 使用 Azure CLI 或 Azure 门户上传你的代码,包括 app.pyrequirements.txtrun.sh
  5. 配置启动命令

    • 在 Azure App Service 的设置中,配置启动命令为:

      bash run.sh
      
  6. 访问应用

    • 部署完成后,你可以通过 Azure 提供的 URL 访问你的应用。

优点

  • 集成:与 Azure 生态系统高度集成,适合使用 Azure 服务的开发者。
  • 易于管理:Azure 门户提供了丰富的管理工具,方便监控和管理应用。
  • 安全性:提供了强大的安全性和合规性。

缺点

  • 成本:成本较高,不适合小规模应用。
  • 学习曲线:对于初学者来说,学习曲线可能较陡峭。

2- 总结

通过以上步骤,你可以从开发到部署完整地搭建一个 Streamlit 应用。无论是选择云服务平台、私有化 VPS 还是 Streamlit Community Cloud,每种方式都有其独特的优点和适用场景。希望这些详细的步骤能帮助你顺利完成 Streamlit 应用的开发与部署!如果在过程中遇到问题,可以随时查阅相关文档或社区资源。