如果已经开发了一个Streamlit应用,并且想要将其部署到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应用,需要以下软件:
现在已经拥有了演示应用和所需的软件,让将应用部署到Heroku上。
所需文件:
首先,需要添加一些文件,这些文件允许Heroku安装所有必需的库并运行应用。
pip install pipreqs
导航到项目目录并输入以下命令:
pipreqs ./
现在requirements.txt文件已经准备好了!它应该看起来像这样:
在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。
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,一名有抱负的数据科学家。是一名计算机科学专业的大四本科生,专攻人工智能。是一个自激励的学习者,渴望尽可能多地帮助数据科学社区。