先上效果图
由于本人在学习深度学习的过程中,有很多关于python的代码,为此想要思考用部分的python代码作为底层,开发一些简单使用的用户界面,因此考虑采用pyqt,gradio,streamlit来作为前端页面。pyqt我也会写,但是由于用QT写界面,工作量相较于其他两位大,为此我不得不考虑效率问题,在这里我选择了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文件运行即可,出现下面这个页面就是成功了~( ̄▽ ̄~)~
如果觉得文章不错,请给小编点赞,关注,收藏!
欢迎有问题留言,看到会回复!