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

2023-10-26

先上效果图 

由于本人在学习深度学习的过程中,有很多关于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文件运行即可,出现下面这个页面就是成功了~( ̄▽ ̄~)~

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

利用pyinstaller打包streamlit移植到其他电脑上使用 的相关文章

  • xlrd.biffh.XLRDError:Excel xlsx 文件;不支持[重复]

    这个问题在这里已经有答案了 我正在尝试使用读取启用宏的 Excel 工作表pandas read excel与 xlrd 库 它在本地运行良好 但是当我尝试将其推送到 PCF 时 我收到此错误 2020 12 11T21 09 53 441
  • Kivy - 文本换行工作错误

    我正在尝试在 Kivy 1 8 0 应用程序中换行文本 当没有太多文字时 一切正常 但如果文本很长并且窗口不是很大 它只是剪切文本 这是示例代码 vbox BoxLayout orientation vertical size hint y
  • Python 2.7 将比特币私钥转换为 WIF 私钥

    作为一名编码新手 我刚刚完成了教程 教程是这样的 https www youtube com watch v tX XokHf nI https www youtube com watch v tX XokHf nI 我想用 1 个易于阅读
  • boto3 资源(例如 DynamoDB.Table)的类型注释

    The boto3库提供了几种返回资源的工厂方法 例如 dynamo boto3 resource dynamodb Table os environ DYNAMODB TABLE 我想注释这些资源 以便我可以获得更好的类型检查和完成 但我
  • 希伯来语中的稀疏句子标记化错误

    尝试对希伯来语使用稀疏句子标记 import spacy nlp spacy load he doc nlp text sents list doc sents I get Warning no model found for he Onl
  • Jupyter Notebooks 不显示进度条

    我正在尝试在 Jupyter 笔记本中显示进度条 这是一台新电脑 我通常做的事情似乎不起作用 from tqdm import tqdm notebook example iter 1 2 3 4 5 for rec in tqdm not
  • 了解 Python 中的酸洗

    我最近接到一项作业 需要以腌制形式放置一本字典 其中每个键引用一个列表 唯一的问题是我不知道腌制形式是什么 谁能给我指出一些好的资源的正确方向来帮助我学习这个概念 pickle 模块实现了一个基本但强大的算法 用于序列化和反序列化 Pyth
  • 可以用 Django 制作移动应用程序吗?

    我想知道我是否可以在我的网站上使用 Django 代码 并以某种方式在移动应用程序 Flutter 等框架中使用它 那么是否可以使用我现在拥有的 Django 后端并在移动应用程序中使用它 所以就像models views etc 是的 有
  • 更改 python tkinter canvas 中的线坐标

    我画了一条线tkinter Canvas现在我想移动一端 这可能吗 例如和itemconfig import tkinter tk tkinter Tk canvas tkinter Canvas tk canvas pack line c
  • python是带有字符串的运算符行为[重复]

    这个问题在这里已经有答案了 我无法理解以下行为 我正在创建 2 个字符串 并使用 is 运算符来比较它 对于第一种情况 它的工作方式有所不同 对于第二种情况 它按预期工作 当我使用逗号或空格时 它显示是什么原因False与比较is当没有使用
  • python 中的 Johansen 协整检验

    我找不到任何有关在处理统计和时间序列分析 pandas 和 statsmodel 的 Python 模块中执行 Johansen 协整检验的功能的参考 有谁知道是否有一些代码可以执行时间序列之间的协整测试 现在 这已在 Python 的 s
  • 使用 scipy curve_fit 拟合噪声指数的建议?

    我正在尝试拟合通常按以下方式建模的数据 def fit eq x a b c d e return a 1 np exp x b c np exp x d e x np arange 0 100 0 001 y fit eq x 1 1 1
  • 如何使用 Django 项目设置 SQLite?

    我已阅读 Django 文档 仅供参考 https docs djangoproject com en 1 3 intro tutorial01 https docs djangoproject com en 1 3 intro tutor
  • 乘以行并按单元格值附加到数据框

    考虑以下数据框 df pd DataFrame X a b c d Y a b d e Z a b c d 1 2 1 3 df 我想在 列中附加数字大于 1 的行 并在该行中的数字减 1 df 最好应该 然后看起来像这样 或者它可能看起来
  • 无法在 python 3.8 上将带有 webapp 的 python 部署到 azure

    我正在尝试使用部署一个测试项目Flask使用以下方法将框架迁移到 Azure 云中Azure CLI https learn microsoft com en us azure app service containers quicksta
  • 如何使用 Keras ImageDataGenerator 预测单个图像?

    我已经训练 CNN 对图像进行 3 类分类 在训练模型时 我使用 keras 的 ImageDataGenerator 类对图像应用预处理功能并重新缩放它 现在我的网络在测试集上训练得非常准确 但我不知道如何在单图像预测上应用预处理功能 如
  • 如何在 robobrowser-python 中发出 POST 请求

    http robobrowser readthedocs org en latest api html http robobrowser readthedocs org en latest api html 我正在尝试使用 APIbrows
  • 更改 Python Cmd 模块处理自动完成的方式

    我有一个 Cmd 控制台 设置为自动完成 Magic the Gathering 收藏管理系统的卡牌名称 它使用文本参数在数据库中查询卡片 并使用结果自动完成 建议卡片 然而 这些卡片名称有多个单词 Cmd 会从last到行尾的空间 例如
  • 长/宽数据到宽/长

    我有一个数据框 如下所示 import pandas as pd d decil 1 decil 1 decil 2 decil 2 decil 3 decil 3 decil kommune AA BB AA BB AA BB 2010
  • 缓存 Flask-登录 user_loader

    我有这个 login manager user loader def load user id None return User query get id 在我引入 Flask Principal 之前它运行得很好 identity loa

随机推荐

  • 基于MATLAB的车牌识别系统+GUI界面的毕业设计(完整源码+课题报告+说明文档+数据)

    文章目录 1 前言 2 实现步骤 1 颜色信息提取 2 倾斜校正 3 字符分割 4 字体识别 5 语音播报 6 存储数据 3 总结 4 完整源码下载 1 前言 近年来 随着交通现代化的发展要求 汽车牌照自动识别技术已经越来越受到人们的重视
  • 浅谈为什么一个java源文件中只能有一个public类?

    第一 只有一个public类 浅谈为什么一个java源文件中只能有一个public类 每个编译单元 文件 只能有一个public 类 这么做的意思是 每个编译单元只能有一个公开的接口 而这个接口就由其public 类来表示 java程序的入
  • javax.ws.rs restful开发

    注解使用原文 https blog csdn net qq 22177809 article details 86592660 java ws rs是jax rs规范中定义的包名 jax rs全称Java API for RESTful S
  • 【继承关系中赋值运算符的重载、单例模式】

    继承关系中赋值运算符的重载 1 程序设计者在基类和派生类中都没有重载operator 函数 C 编译器将在基类和派生类中自动产生按位赋值的 重载operator 函数 C 编译器会在派生类的重载赋值函数中 加入基类重载赋值函数的调用 是C
  • IDEA报错 java: 需要class, interface或enum

    文章目录 报错截图 源码 原因 修改 结果 报错截图 源码 import java awt import java io import javax swing package Chapter 2 原因 在Idea中 package要放在im
  • c语言我爱你二进制,二憨的爱情c语言表白代码我爱你·爱如流离.DOC

    摘要 二憨的爱情 c语言表白代码我爱你 爱如流离 HYPERLINK 二憨的爱情 c语言表白代码我爱你 爱如流离 那些或喜或悲的情节慢慢的在我脑中烟消云散 她从不后 于是 流离 选择了我 java旋转爱心代码 更不是金钱 爱情 她早就知道靠
  • 【tkinter学习笔记 - 4】:canvar画布、Text文本框的使用

    目录 canvar画布 代码演示 二 Text文本框的使用 代码演示 canvar画布 canvar 画布 是一个矩形区域 可以放置图形 图像 组件等 代码演示 from tkinter import import tkinter as t
  • C++第一课:hello world!+int char变量

    c语言大家都知道吧 c 就是c的延伸 众所周知 c的影响力极大 那是不是说c 就更是一门很牛的语言 答案 没错 但它非常的难 anyway 语言还是要学的 所以老规矩 helloworld ps 我用的ide是vscode可以到我发布的第一
  • 选择屏幕几种事件的执行顺序

    最先执行的是INITILIZATION 用于变量的初始化 然后是AT SELECTION SCREEN OUTPUT 如果把选择屏幕也看作是普通的SCREEN 那它对应的是屏幕的PBO 最后是AT SELECTION SCREEN 这个可以
  • 华为OD机试 - 人数最多的站点(Java)

    题目描述 公园园区提供小火车单向通行 从园区站点编号最小到最大通行如1 2 3 4 1 然后供员工在各个办公园区穿梭 通过对公司N个员工调研统计到每个员工的坐车区间 包含前后站点 请设计一个程序计算出小火车在哪个园区站点时人数最多 输入描述
  • Linux下 Nginx设置开机自启

    1 将启动命令添加到 etc rc d rc local 文件中 2 添加完保存后 给rc local文件赋予可执行权限 chmod x etc rc d rc local
  • CentOS7.6服务器部署VNC

    CentOS7 6服务器部署VNC 安装vnc服务器 开启vnc 开启远程端口 查看服务器ip 关闭防火墙和selinux 远程访问 安装vnc服务器 root localhost yum install tigervnc server 开
  • Python实战之数据表提取和下载自动化

    在网络爬虫领域 动态渲染类型页面的数据提取和下载自动化是一个常见的挑战 本文将介绍如何利用Pyppeteer库完成这一任务 帮助您轻松地提取动态渲染页面中的数据表并实现下载自动化 一 环境准备 首先 确保您已经安装了Python环境 接下来
  • blender2.8 利用zbrush减面工具进行减面 再进行拓扑

    有时候想要进行重拓扑的模型一级细分的面数就非常高 为了提高导入到其它软件的加载速度 最好对模型的面数进行减面 这里使用zbrush的自带减面工具 在减面前记得Duplicate一份模型 首先选中想要减面的百分比 这里我先选择百分之四十 再点
  • Ubuntu 虚拟机无法联网(NAT模式下)- 解决方法

    想要在 Ubuntu16 04 虚拟机上安装 git 克隆仓库 只需在 Ubuntu 终端输入以下命令即可 sudo apt get install git 但是我在输入之后并未安装成功 反而显示以下结果 全部都是 暂时不能解析域名 cn
  • bugku-eval

    这是一道php题 标题是eval 先查一下eval的用法 Eval var dump echo的区别 var dump 会将传入的变量打印到页面 变量类型 变量长度和变量值 eval 会执行传入到其中的php代码 echo输出的是最终的结果
  • 自动化框架之python+selenium+pytest

    1 概述 selenium 基于JavaScript代码库的自动化测试框架 通过脚本语言 模拟用户行为操作 最接近用户真实场景 实现对web自动测试 Selenium 是目前的最火爆企业最主流的webUI自动化框架 pytest pytes
  • Docker学习之Dockerfile

    Dockerfile是为了快速构建镜像 Dockerfile由一行行命令语句组成 并且支持以 开头的注释行 一般而言 Dockerfile分为4个部分 基础镜像信息 维护者信息 镜像操作指令 容器启动时执行指令 直接构建出一个环境容器apa
  • vue el-table里输入框、下拉框校验弹出框提示

    table里面有输入框或下拉框 要执行你的方法进行造作之前需要校验 可以在form里面嵌套表格 参考https blog csdn net qq 45039940 article details 122260642 可以弹出提示框进行提示
  • 利用pyinstaller打包streamlit移植到其他电脑上使用

    先上效果图 由于本人在学习深度学习的过程中 有很多关于python的代码 为此想要思考用部分的python代码作为底层 开发一些简单使用的用户界面 因此考虑采用pyqt gradio streamlit来作为前端页面 pyqt我也会写 但是