部署streamlit工程到Heroku

Posted sanqima

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了部署streamlit工程到Heroku相关的知识,希望对你有一定的参考价值。

    streamlit是一个非常简洁的python语言web框架,用于机器学习、数据可视化等。这里介绍在将streamlit工程部署到Heroku。系统环境:Mac电脑 + streamlit 1.3.0

1、安装Git和Heroku CLi

1.1 安装Git

sudo apt-get install git

1.2 安装Heroku Cli

    在Heroku官网下载 Heroku CLi,如图(1)所示:

图(1) 下载Heroku CLi并安装

    下载之后,一路点击默认,直到安装完成。

2、创建Heroku账号

    在Heroku官网,使用自己的google邮箱注册一个账号,比如,hello@google.com,这个邮箱地址是用于将本地web工程打包Heroku远端,填写在setup.sh配置文件里。

3、创建streamlit工程

    这里以创建calculate项目为例,进行说明。

3.1 创建文件和文件夹

## 创建项目文件夹,并git初始化本地的main分支
mkdir calculate
cd calculate
git init
git brach -m main

## 创建主代码
touch app.py

## 创建配置文件
touch set.up
touch Profile
touch runtime.txt
touch requirements.txt

3.2 编写主程序app.py

    app.py文件内容如下:

import streamlit as st


## 两数相加
def add(a, b):
    return a + b


## 两数相减
def sub(a, b):
    return a - b


## 两数相乘
def mul(a, b):
    return a * b


## 两数相除
def div(a, b):
    if b == 0:
        return 0
    else:
        return a / b


def main():
    st.subheader("四则运算")
    num1 = st.number_input('数字1')
    num2 = st.number_input('数字2')
    res = 0
    with st.form("加减乘除"):
        col1, col2, col3, col4 = st.columns(4)
        with col1:
            bAdd = st.form_submit_button("相加")
            if bAdd:
                res = add(num1, num2)

        with col2:
            bSub = st.form_submit_button("相减")
            if bSub:
                res = sub(num1, num2)

        with col3:
            bMul = st.form_submit_button("相乘")
            if bMul:
                res = mul(num1, num2)

        with col4:
            bDiv = st.form_submit_button("相除")
            if bDiv:
                res = div(num1, num2)

        st.write("结果为:", res)


if __name__ == '__main__':
    main()

3.3 导出依赖包配置文件 requrements.txt

    点击Pycharm菜单栏上的[工具] ----》 同步Python的要求 --》在当前工程目录自动生成依赖包配置文件: requirements.txt,如图(2) 、图(3)所示:

图(2) 点击Pycharm菜单栏上的[工具] --> 同步Python要

图(3) 采用"强相等" 导出 requirements.txt文件

3.4 指定python的运行版本文件 runtime.txt

    runtime.txt的内容如下:

python-3.9.7

3.5 编写打包文件 setup.sh

    setup.sh的内容如下:

mkdir -p ~/.streamlit/

echo "\\
[general]\\n\\
email = \\"你的google邮箱地址\\"\\n\\
" > ~/.streamlit/credentials.toml

echo "\\
[server]\\n\\
headless = true\\n\\
enableCORS=false\\n\\
port = $PORT\\n\\
" > ~/.streamlit/config.toml

3.6 编写启动文件 Procfile

    Procfile的内容如下:

web: sh setup.sh && streamlit run app.py

3.7 本地测试app.py

    运行如下命令,测试app.py,测试完后再打包

streamlit run app.py

效果如下:

图(4) 本地测试工程

3.8 工程目录结构

    calculate项目的目录结构如下:

图(5) calculate项目的目录结构

3、打包工程到Heroku

    这里使用Git + Heroku CLi工具将streamlit类型的工程:calculate打包到Heroku。

3.1 登录Heroku

## 进入工程目录
cd calculate

## 登录Heroku
heroku login -i

## 输入注册时的邮箱和密码

3.2 保存修改到本地分支

git add .
git commit -m "init"

3.3 创建Heroku项目

创建一个Heroku项目,若没有指定名称,则Heroku自动填充。

heroku create

3.4 将本地分支推送到远程heroku的main分支

git push heroku main

3.5 设置进程个数

heroku的免费版本,默认设置1个进程;收费版本,可设置多个。

heroku ps:scale web=1

3.6 打开heroku远端项目

hero open

4、修改heroku远程项目名称

    由于使用heroku create创建的项目以字母+随机数 命名,不方便记忆。可使用 heroku apps:rename XXX 将远端项目名称进行修改,步骤如下:

## 1.打开终端,登录heroku
heroku login -i

## 2.进入本地工程目录,比如myProject目录
cd myProject

## 3.修改名称 (xxx是你的app的新名称,yyy是app的旧名称)
heroku apps:rename xxx --app yyy

## 4.将名称修改推送到远端
git remote rm heroku
heroku git:remote -a xxx

    比如,将远端项目名称从tranquil-island-36136 改成 tocalc,命令如下:

## 1.打开终端,登录heroku
heroku login -i

## 2.进入本地工程目录,此处为calculate
cd calculate

## 3.修改名称
## 由于calculate这个名称已被占用,所以使用tocalc作为新名称
heroku apps:rename tocalc --app tranquil-island-36136

## 4.将名称修改推送到远端
git remote rm heroku
heroku git:remote -a tocalc

以上是关于部署streamlit工程到Heroku的主要内容,如果未能解决你的问题,请参考以下文章

Streamlit Python 应用程序成功部署到 Heroku,但出现应用程序错误

ModuleNotFoundError:将 Streamlit 应用程序部署到 Heroku 时没有名为“google.cloud”的模块

无法在 Heroku 上部署 Streamlit 应用程序 - 缺少 libgcc_s.so.1

Streamlit 应用程序可以在本地运行,但不能在 Heroku 上运行

统计 Heroku-Streamlit Web 应用的请求数

Tensorflow 应用程序不再部署到 Heroku:Slug 尺寸太大