Python详细介绍模型封装部署流程

目录
  • 一、桌面应用软件
  • 二、Pyside2&Qt designer
  • 三、模型封装部署
  • 四、Pyinstaller
  • 五、总结

一、桌面应用软件

桌面应用软件是基于GUI(Graphical User Interface,图形用户界面)交互式程序,需要实现GUI库实现前端交互。

Python常见的GUI库

  • TKinter:基于Tk的Python库,这是Python官方采用的标准库,优点是作为Python标准库、稳定、发布程序较小,缺点是控件相对较少;
  • wxPython:基于wxWidgets的Python库,优点是控件比较丰富、缺点是稳定性相对差点、文档少、用户少;
  • pyQT5,Pyside2:基于Qt的Python库,优点是控件比较丰富、跨平台体验好、文档完善、用户多、缺点是库比较大,发布出来的程序比较大;
  • Qt Designer:Qt是一个1991年由Qt Company开发的跨平台C++图形用户界面应用程序开发框架;
  • PyQT5:"Riverbank Computing"公司早期的python GUI开发工具库,是QT与Python的结合,但并非Qt公司出品,属于“义子”;
  • Pyside2:2018年7月,Qt公推出的工具库,它提供了对Qt5.12+完整框架的访问,简单点来说就是在Python下使用Qt,即Qt的“亲儿子”;使用上PyQt5与PySide2差别很小,接口调用几乎一模一样。

程序打包工具:Pyinstaller

下图为Python桌面应用软件开发大体的技术架构。

图1 软件技术架构

二、Pyside2&Qt designer

(1)PySide2——控件

图形界面的工具基础:控件(widget)、信号(signal)与槽(solt),控件表示前端界面可显示/操作/交互的元素,如按钮、输入控件、展示控件等,供用户点击、接受用户输入、展示内容、存放其它控件。

PySide2的安装:

pip install PySide2 -i https://pypi.tuna.tsinghua.edu.cn/simple/

下面为一个PySide2程序的实现流程:

1.定义一个应用

2.定义主窗口

3.定义需要的控件

4.执行应用,进入事件循环

# -*- coding: utf-8 -*-
"""
# @file name  : 01_helloworld.py
# @brief      : 使用pyside编写第一个软件
"""
from PySide2.QtWidgets import QApplication, QMainWindow, QTextBrowser, QLabel
if __name__ == "__main__":
    app = QApplication([])  # UI应用程序管理应用
    # ================================================
    # 1. 定义主窗口
    window = QMainWindow()
    # 2. 定义文本框显示
    label = QLabel(window)
    label.setText("Hello World!")
    # 3. 窗口显示
    window.show()
    # ================================================
    app.exec_()  # 进入QApplication的事件处理循环

图2 PySide2实现第一个GUI界面

(2)PySide2——信号(signal)与槽(slot)

用户对图形界面的控件操作就会产生信号,程序应能接收识别信号,并进行相应的处理。特点信号的处理函数称为槽。

按钮被点击时,向程序发出信号,程序自动执行btn_slot函数。

# -*- coding: utf-8 -*-
"""
# @file name  : 02_signal&slot.py
# @brief      : 了解信号与槽
"""
from PySide2.QtWidgets import QApplication, QMainWindow, QPushButton, QLineEdit
if __name__ == "__main__":
    app = QApplication([])  # UI应用程序管理应用
    # ================================================
    # first. 定义主窗口
    window = QMainWindow()
    window.resize(500, 400)
    window.move(300, 310)
    # 2. 定义按钮控件
    def btn_slot():
        print("用户点击了按钮,将执行xxx")
    btn = QPushButton("我的按钮", window)
    btn.clicked.connect(btn_slot)
    # 3. 单行文本框
    def text_slot():
        text = text_edit.text()
        print("检测到文本框变动,当前文本框信息为:{}".format(text))
    text_edit = QLineEdit(window)
    text_edit.move(100, 0)
    text_edit.setPlaceholderText('请输入信息...')
    text_edit.textChanged.connect(text_slot)
    # 窗口显示
    window.show()
    # ================================================
    app.exec_()  # 进入QApplication的事件处理循环

图3PySide2实现第二个GUI界面

(3)常用控件

1.按钮:btn = QPushButton(“我的按钮”,window)

2.单行文本框:text_edit = LineEdit(window)

3.标签显示:label = QLabel(window)

4.文件选择:path_file,filetype = QFileDialog.getOpenFileName(window,"选取文件","./","All File(*);;Text Files(*.jpg)")

(4)Qt Designer

Qt Designer可以通过拖曳的方式完成复杂的界面设计,完成控件设计。Qt Designer生成的UI界面是一个后缀为.ui的文件,其实是一个XML文件。通过使用pyuic5命令将.ui文件转换成.py文件,然后将.py文件引入到自定义的Python代码中。主要分为以下四步:

  • 安装:随着pyside2安装时,自动安装
  • 启动:Python安装目录下Scripts\pyside2-designer.exe
  • 转换:pyside2-uic xxx.ui > xxx.py
  • 使用:在QMainWindow中初始化xxx.py中的控件,然后定义槽函数

图4 Qt Designer设计流程

三、模型封装部署

封装--面向对象三大特性之一,面向对象(Object Oriented Programming)的三大特性如下:

  • 封装(Encapsulation):隐藏对象的属性和实现细节,仅对外提供公共访问方式;
  • 继承(Inheritance):使用已存在的类定义作为基础建立新类的方法;
  • 多态(Polymorphism):“多种状态”,接口的多种不同的实现方式即为多态;

类的设计三要素:

  • 类名:这类事物的名字;
  • 属性:这类事物具有什么样的特征;
  • 方法:这类事物具有什么样的行为;

图5封装模型的过程

  • 类名:Predictor;
  • 属性:model,path_ckpt,device,transform;
  • 方法:preprocess,inference,get_model,get_transform;

四、Pyinstaller

Pyinstaller是一个用来将Python程序打包成一个独立可执行软件包,支持Windows、Linux和Mac OS,Pyinstaller可以读取您编写的Python脚本。

Pyinstaller分析代码执行所需的所有模块,然后将这些文件的副本和Python解释器一起放在单个文件夹中,或者在单个可执行文件中。

Pyinstaller的安装:

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

软件打包执行命令:pyinstaller xxx.py,完成后到root/dist/xxx下,找到xxx.exe

pyinstaller main.py --noconsole -F -p D:\course_study\CV_Item\self\img_cls

更新spec文件命令:

pyinstaller -F --onefile main.spec

常用参数:

-F,-onefile产生单个的可执行文件

-p,设置python导入模块的路径(和设置pythonpath环境变量的作用相似)

--noconsole软件启动时不显示命令窗

五、总结

到此这篇关于Python详细介绍模型封装部署流程的文章就介绍到这了,更多相关Python模型封装内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Python实现自动驾驶训练模型

    目录 一.安装环境 二.配置环境 三.训练模型 1.数据处理 2.搭建模型 3.运行结果 四.总结 一.安装环境 gym是用于开发和比较强化学习算法的工具包,在python中安装gym库和其中子场景都较为简便. 安装gym: pip install gym 安装自动驾驶模块,这里使用Edouard Leurent发布在github上的包highway-env: pip install --user git+https://github.com/eleurent/highway-env 其中包含6

  • Python并发编程之IO模型

    五种IO模型 为了更好地了解IO模型,我们需要事先回顾下:同步.异步.阻塞.非阻塞 同步(synchronous) IO 异步(asynchronous) IO 阻塞(blocking) IO 非阻塞(non-blocking)IO 五种I/O模型包括:阻塞I/O.非阻塞I/O.信号驱动I/O(不常用).I/O多路转接.异步I/O.其中,前四个被称为同步I/O. 上五个模型的阻塞程度由低到高为:阻塞I/O > 非阻塞I/O > 多路转接I/O > 信号驱动I/O > 异步I/O,因

  • python的numpy模块实现逻辑回归模型

    使用python的numpy模块实现逻辑回归模型的代码,供大家参考,具体内容如下 使用了numpy模块,pandas模块,matplotlib模块 1.初始化参数 def initial_para(nums_feature):     """initial the weights and bias which is zero"""     #nums_feature是输入数据的属性数目,因此权重w是[1, nums_feature]维     #

  • Python自动化测试PO模型封装过程详解

    在自动化中, Selenium 自动化测试中有一个名字经常被提及 PageObject( 思想与面向对象的特征相 同 ) ,通常 PO 模型可以大大提高测试用例的维护效率 优点:可重用,业务和对象分离,代码结构清晰,方便代码维护 核心要素 1. 在 PO 模式中抽离封装集成一个BasePage 类,该基类应该拥有一个只实现 webdriver 实例的属性 2. 每一个 page 都继承 BasePage ,通过 driver 来管理本 page 中元素,将 page 中的操作封装成一个个方法 3

  • Python如何加载模型并查看网络

    目录 加载模型并查看网络 打开终端 神经网络_模型的保存,模型的加载 模型的保存(torch.save) 模型的加载(torch.load) 加载模型并查看网络 加载模型,以vgg19为例. 打开终端 > python Python 3.7.2 (tags/v3.7.2:9a3ffc0492, Dec 23 2018, 23:09:28) [MSC v.1916 64 bit (AMD64)] on win32 Type "help", "copyright"

  • python封装成exe的超详细教程

    目录 第一种:.py文件直接封装成exe 第二种:整个项目封装成exe 补充说明: 总结 第一种:.py文件直接封装成exe 1.cmd进入py文件所在的目录 备注:在py文件所在的目录下,按住shift+鼠标右击,然后找到“在此处打开PowerShell窗口”,即可进入当前目录 2.输入以下代码: 备注:使用-D制作出来的exe比使用-F的快很多,因为-F把所有dll文件都打包到一个exe中了(-F这时候exe会很大,加载变慢,推荐-D) #-w:不显示后台 -i添加图标 pyinstalle

  • Python封装数据库连接池详解

    目录 一.数据库封装 1.1数据库基本配置 1.2 编写单例模式注解 1.3 构建连接池 1.4 封装Python操作MYSQL的代码 二.连接池测试 场景一:同一个实例,执行2次sql 场景二:依次创建2个实例,各自执行sql 场景三:启动2个线程,但是线程在创建连接池实例时,有时间间隔 场景四:启动2个线程,线程在创建连接池实例时,没有时间间隔 前言: 线程安全问题:当2个线程同时用到线程池时,会同时创建2个线程池.如果多个线程,错开用到线程池,就只会创建一个线程池,会共用一个线程池.我用的

  • Python详细介绍模型封装部署流程

    目录 一.桌面应用软件 二.Pyside2&Qt designer 三.模型封装部署 四.Pyinstaller 五.总结 一.桌面应用软件 桌面应用软件是基于GUI(Graphical User Interface,图形用户界面)交互式程序,需要实现GUI库实现前端交互. Python常见的GUI库 TKinter:基于Tk的Python库,这是Python官方采用的标准库,优点是作为Python标准库.稳定.发布程序较小,缺点是控件相对较少: wxPython:基于wxWidgets的Pyt

  • IOS 静态库打包流程简化详细介绍

    IOS 静态库打包流程简化 在iOS开发中,我们经常会遇到开发SDK的需求.开发好的静态库后需要手动的合并.a文件,然后再拷贝相关的头文件,接着把静态库和头文件放在同一个文件里面打包发送给SDK的使用者.本文将介绍如何使用脚本,简化这一连串的过程.为了照顾广大初学者,教程将会详细介绍打包的基本流程. 关于静态库和动态库区别,可以看我的另外一篇文章: iOS静态库和Framework区别 项目配置 新建一个名为TestSDK的静态库工程 然后点击Target下边的加号按钮,添加新的Target 选

  • Linux shell脚本基础学习详细介绍(完整版)第1/2页

    Linux shell脚本基础学习这里我们先来第一讲,介绍shell的语法基础,开头.注释.变量和 环境变量,向大家做一个基础的介绍,虽然不涉及具体东西,但是打好基础是以后学习轻松地前提. 1. Linux 脚本编写基础 ◆1.1 语法基本介绍1.1.1 开头程序必须以下面的行开始(必须方在文件的第一行):#!/bin/sh符号#!用来告诉系统它后面的参数是用来执行该文件的程序.在这个例子中我们使用/bin/sh来执行程序.当编辑好脚本时,如果要执行该脚本,还必须使其可执行.要使脚本可执行:编译

  • python request 模块详细介绍

    request Requests 是使用 Apache2 Licensed 许可证的 基于Python开发的HTTP 库,其在Python内置模块的基础上进行了高度的封装,从而使得Pythoner进行网络请求时,变得美好了许多,使用Requests可以轻而易举的完成浏览器可有的任何操作. GET 请求 # 1.无参数实例     import requests     ret = requests.get('https://github.com/timeline.json')     print

  • Python torch.onnx.export用法详细介绍

    目录 函数原型 参数介绍 mode (torch.nn.Module, torch.jit.ScriptModule or torch.jit.ScriptFunction) args (tuple or torch.Tensor) f export_params (bool, default True) verbose (bool, default False) training (enum, default TrainingMode.EVAL) input_names (list of st

  • AngularJS 执行流程详细介绍

    一.启动阶段 大家应该都知道,当浏览器加载一个HTML页面时,它会将HMTL页面先解析成DOM树,然后逐个加载DOM树中的每一个元素节点.我们可以把AngularJS当做一个类似jQuery的js库,我们通过<script>标签引入到HTML中,那么此时Angular就做为一个普通的DOM节点等待浏览器解析,当浏览器解析到这个节点时,发现它是一个js文件,那么浏览器会停止解析剩余的DOM节点,开始执行这个js(即angular.js),同时Angular会设置一个事件监听器来监听浏览器的DOM

  • python学习Selenium介绍及安装部署详解

    目录 selenium介绍 selenium原理 Selenium安装部署步骤 1. 准备好python环境: 2. 下载selenium并安装: 3. 下载浏览器对应的driver版本: 4.driver配置环境变量 Mac: Windows: selenium介绍 Selenium 是一个用于Web应用程序测试的工具,支持web浏览器自动化,主要由三个工具组成: WebDriver:使用浏览器提供的API去控制浏览器,模拟认为操作,不具备侵入性. IDE:Chrome和Firefox的扩展插

  • python中进程间通信详细介绍

    目录 进程间通信(IPC) 管道通信(Pipe) 1.通信原理 2. 实现方法 共享内存 1.通信原理 2.实现方法 信号量(信号灯集) 1.通信原理 2. 实现方法 3.代码演示 进程间通信(IPC) 必要性 进程间空间独立,资源不共享,此时在需要进程间数据传输时就需要特定的手段进行数据通信 常用进程间通信方法 管道 消息队列 共享内存 型号 信号量 套接字 管道通信(Pipe) 1.通信原理 在内存中开辟管道空间,生成管道操作对象,多个进程使用同一个管道对象进行读写即可实现通信 代码演示(w

  • Python 字典(Dictionary)详细介绍

    目录 1.访问字典里的值 2.修改字典 3.删除字典元素 3.1字典键的特性 4.字典内置函数&方法 字典是另一种可变容器模型,且可存储任意类型对象. 字典的每个键值 key=>value 对用冒号 : 分割,每个键值对之间用逗号 , 分割,整个字典包括在花括号 {} 中 格式如下所示: d = {key1 : value1, key2 : value2 } 注意:dict 作为 Python 的关键字和内置函数,变量名不建议命名为 dict. 键一般是唯一的,如果重复最后的一个键值对会替换

随机推荐