利用pyinstaller打包streamlit移植到其他电脑上使用

先上效果图 

由于本人在学习深度学习的过程中,有很多关于python的代码,为此想要思考用部分的python代码作为底层,开发一些简单使用的用户界面,因此考虑采用pyqt,gradio,streamlit来作为前端页面。pyqt我也会写,但是由于用QT写界面,工作量相较于其他两位大,为此我不得不考虑效率问题,在这里我选择了streamlit来作为前端开发。

目录

streamlit第一步

pyinstaller打包streamlit


streamlit第一步

先创建一个anconda环境

conda activate base
 #激活环境
conda create -n pyqt(你的环境名) python=3.7.16
#创建一个新的虚拟环境,我这里的环境名是pyqt
conda activate pyqt
#激活新建的环境

首先,先安装streamlit

pip install streamlit==1.19.0 -i https://pypi.tuna.tsinghua.edu.cn/simple

再安装pyinstaller

pip install pyinstaller==5.8.0 -i https://pypi.tuna.tsinghua.edu.cn/simple

然后咱们就可以开始咱们伟大的一步了,先写出我们的streamlit的简单代码

我的代码参考如下:

import streamlit as st
import pandas as pd
import numpy as np


st.title("我的超棒应用")
#todo 设置滑动条
x=st.slider("x")
st.write(x,"squared is",x*x)
#todo 设置用户输入
url=st.text_input("Enter URl")
st.write("The Entered URL is",url)



#todo 设置check框读取数据库
df = "连接数据库"
if st.checkbox('Show dataframe'):

    st.write(df)
#todo 复选框
option=st.selectbox("你想选择什么?",["显示图表","关闭显示"])
st.write("you selected:",option)
option2=st.selectbox("你想选择什么?",["刷新","不刷新"])
st.write("you selected:",option2)

col1, col2, col3 = st.columns(3)
col1.metric("Temperature", "70 °F", "1.2 °F")
col2.metric("Wind", "9 mph", "-8%")
col3.metric("Humidity", "86%", "4%")
#todo 侧边栏
st.sidebar.title('菜单侧边栏')
add_selectbox = st.sidebar.selectbox(
    "这个是下拉框,请选择?",
    ("1", "Home 2", "Mobile 2")
)
st.sidebar.write("选择了:",add_selectbox)
def load_data():
    # todo 画表
    chart_data = pd.DataFrame(np.random.randn(20, 3),columns=['a', 'b', 'c'])
    st.line_chart(chart_data)
if(option=="1"):
    load_data()


def load_data(url):
    df = pd.read_csv(url)
    return df


df = load_data(r"E:\train\pytorch_learn\diabetes.csv")
st.dataframe(df)
# 如果按钮被点击,就触发重新运行

placeholder = st.empty()
try:
    # 创建一个空的占位符
    placeholder = st.empty()
    # 一些可能出错的代码...
except RuntimeError as e:
    # 使用占位符来替换掉异常信息
    placeholder.empty()

注意这里,要运行py文件是不可以直接运行的,要在cmd命令里面输入以下代码

stream run app.py
#这里的app.py是我的python文件名

如果你是pycharm的话,采用下面的终端运行即可

如果出现这个,咱们的第一步就成功了!给自己比个心(✪▽✪) 

pyinstaller打包streamlit

然后就到了,比较麻烦的步骤,怎么打包这个streamlit文件,为此我查遍了很多文件,截止目前为止,但是都没有谁做出来并分享了的。不过皇天不负有心人,有一份python文件打包方式给了我很不错的思考。

咱们首先创建一个hooks文件夹,在下面创建一个python文件(我的叫hook-streamlit.py),代码如下:

from PyInstaller.utils.hooks import copy_metadata

datas = copy_metadata("streamlit")

然后在相同目录(app.py文件)下,咱们创建一个run_app.py文件

然后输入以下代码:

import streamlit.web.cli as stcli
import os, sys


def resolve_path(path):
    resolved_path = os.path.abspath(os.path.join(os.getcwd(), path))
    return resolved_path


if __name__ == "__main__":
    sys.argv = [
        "streamlit",
        "run",
        resolve_path("app.py"),
        "--global.developmentMode=false",
    ]
    sys.exit(stcli.main())

然后咱们先打包第一次:

注意要有以上三个文件

打包命令如下:(是在app.py文件夹目录下面打包

pyinstaller --onefile --additional-hooks-dir=./hooks run_app.py --clean

 然后就会生成上面的run_app.spec这个文件,咱们先将这时候的dist和build文件删掉。

打开run_app.spec文件(自带的记事本就可以打开),编辑下面部分

#添加下面部分
from PyInstaller.utils.hooks import collect_data_files
from PyInstaller.utils.hooks import copy_metadata

datas = [("你的streamlit安装位置/streamlit/runtime","./streamlit/runtime")]
datas += collect_data_files("streamlit")
datas += copy_metadata("streamlit")


block_cipher = None

#修改下面a里面的datas为=datas
a = Analysis(
    ['run_app.py'],
    pathex=[],
    binaries=[],
    datas=datas,
    hiddenimports=[],
    hookspath=['./hooks'],
    hooksconfig={},
    runtime_hooks=[],
    excludes=[],
    win_no_prefer_redirects=False,
    win_private_assemblies=False,
    cipher=block_cipher,
    noarchive=False,
)

然后确认无误以后就开始咱们的第二次打包,

输入以下指令:

pyinstaller run_app.spec --clean

然后会在dist文件夹下面,生成的run_app.exe文件,这时候运行会报错,找不到文件,

咱们就只需要将前面的app.py文件复制到这个文件夹下面,就可以正常运行了。

点击exe文件运行即可,出现下面这个页面就是成功了~( ̄▽ ̄~)~

如果觉得文章不错,请给小编点赞,关注,收藏!

欢迎有问题留言,看到会回复!

评论 57
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Helloorld_11

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值