部署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)所示:
下载之后,一路点击默认,直到安装完成。
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)所示:
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
效果如下:
3.8 工程目录结构
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 上运行