Streamlit应用部署到Heroku指南

如果已经开发了一个Streamlit应用,并且想要将其部署到Heroku上,那么本文正是所需要的。将通过一个简单的房价预测应用示例,来说明部署过程。

目录

  • 构建演示应用
  • 所需软件
  • Heroku部署
  • 结束语

构建演示应用

将构建一个简单的房价预测应用。可以从下载数据集。以下是构建应用的代码示例。

import pandas as pd import numpy as np import streamlit as st import time from sklearn.preprocessing import StandardScaler from sklearn.linear_model import LinearRegression from sklearn.model_selection import train_test_split def main(): df = load_data() df = preprocess_data(df) st.title('班加罗尔房价预测') st.markdown('输入以下信息,将预测**梦想之家**的价格') st.sidebar.title('开发者联系') st.sidebar.markdown('[![](https://img.shields.io/badge/Author-名-brightgreen)](https://www.linkedin.com/in/链接/)') st.warning('以下字段仅输入数值') bhk = st.text_input("总BHK") area = st.text_input("面积(平方英尺)") baths = st.text_input("总浴室数") balcony = st.selectbox("总阳台数", ['0', '1', '2', '3']) submit = st.button('预测价格') if submit: if bhk and area and baths and balcony: with st.spinner('预测中...'): time.sleep(2) bhk, area, baths, balcony = int(bhk), int(area), int(baths), int(balcony) x_test = np.array([[bhk, area, baths, balcony]]) prediction = predict(df, x_test) st.info(f"**梦想之家**价格是{prediction}万") else: st.error('请填写所有详细信息') @st.cache def train_model(df): global scaler X, y = df.iloc[:, :-1].values, df.iloc[:, -1].values scaler = StandardScaler().fit(X) X = scaler.transform(X) X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=23) model = LinearRegression().fit(X_train, y_train) return model, scaler def predict(df, x_test): model, scaler = train_model(df) X_test = scaler.transform(x_test) y_pred = model.predict(X_test) return round(y_pred[0], 2) def load_data(): return pd.read_csv('Datasets/house-price-prediction.csv') def preprocess_data(df): df = df.loc[:, ['size', 'total_sqft', 'bath', 'balcony', 'price']] df.dropna(inplace=True) df = df[df['size'].str.contains('BHK', na=False)] df['size'] = df['size'].str.replace(r'D', '').astype(int) df['total_sqft'] = df['total_sqft'].str.extract(r'(d+)', expand=False) df['bath'] = df['bath'].astype(int) df['balcony'] = df['balcony'].astype(int) df['total_sqft'] = df['total_sqft'].astype(int) return df if __name__ == '__main__': main()

可以使用以下命令在本地运行Streamlit应用:

streamlit run app.py

注意:app.py是想要运行的文件。

所需软件

为了部署Streamlit应用,需要以下软件:

  • Git - 从下载
  • Heroku CLI - 从下载
  • 免费Heroku账户 - 在创建并按照屏幕上的指示操作

Heroku部署

现在已经拥有了演示应用和所需的软件,让将应用部署到Heroku上。

所需文件:

首先,需要添加一些文件,这些文件允许Heroku安装所有必需的库并运行应用。

  • requirements.txt - 这个文件包含了项目工作所需的所有库。这个文件可以手动创建,通过浏览项目并列出所有使用的库。但将使用pipreqs模块自动创建requirements.txt文件。如果还没有安装,请使用以下命令安装它。
pip install pipreqs

导航到项目目录并输入以下命令:

pipreqs ./

现在requirements.txt文件已经准备好了!它应该看起来像这样:

  • Procfile和setup.sh - 使用这两个文件,告诉Heroku需要执行的命令来启动应用。

在setup.sh文件中,将创建一个包含credentials.toml和config.toml文件的streamlit文件夹。以下是要粘贴到setup.sh文件中的命令:

mkdir -p ~/.streamlit/ echo " [general] email = your_email@example.com " > ~/.streamlit/credentials.toml echo " [server] headless = true enableCORS=false port = $PORT " > ~/.streamlit/config.toml

Procfile用于首先执行setup.sh,然后调用streamlit run来运行应用。Procfile应该看起来像这样:

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

注意:app.py是想要首先运行的文件(包含主函数)。如果在其他文件中定义了主函数,请用那个文件替换app.py。

创建Git仓库

Heroku提供了不同的部署方式,但将使用git,因为它很简单。

输入以下命令以初始化一个空的git仓库。确保在项目根目录中。

git init

登录到Heroku:

接下来,需要登录到Heroku。可以使用以下命令做到这一点。

heroku login

将被要求按下一个按钮,之后将被重定向到默认浏览器中的登录屏幕。

输入凭据后,应该看到类似以下内容。

部署应用

最后,可以将应用部署到Heroku。让首先创建应用的实例。可以使用以下命令做到这一点。

heroku create 应用名

应用名是为应用程序选择的名字。不能使用相同的名称,因为它已经被占用了。所以请根据应用名称进行选择。

最后,使用以下命令将代码推送到该实例。

git add . git commit -m "提交信息" git push heroku master

当运行git push Heroku master时,应该会注意到它应该自动检测到有一个Python应用,并且应该安装requirements.txt中的所有包。命令完成后,应该会看到类似以下内容。

注意:由于选择了应用名,得到了这个URL。将根据应用名称获得一个URL。点击URL查看实时部署应用。

恭喜!已经成功部署了第一个应用。

额外提示

如果希望在部署后更改/编辑文件,可以在文件中进行更改,并运行以下命令以使这些更改在实时部署的应用中反映出来。

git add . git commit -m "提交信息" git push heroku master

将再次获得与上图相同的URL,点击该URL,就可以开始了!

今天的讨论到此结束。感谢阅读!

希望喜欢这篇文章,并成功地将第一个Streamlit应用部署到Heroku上!点击观看第一个实时Streamlit应用。欢迎在下面的评论部分留下第一个实时应用链接。

如果遗漏了什么重要内容或想要分享想法?在下面评论,会回复。

是Harsh Dhamecha,一名有抱负的数据科学家。是一名计算机科学专业的大四本科生,专攻人工智能。是一个自激励的学习者,渴望尽可能多地帮助数据科学社区。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485