Python詳細(xì)介紹模型封裝部署流程
一、桌面應(yīng)用軟件
桌面應(yīng)用軟件是基于GUI(Graphical User Interface,圖形用戶界面)交互式程序,需要實(shí)現(xiàn)GUI庫(kù)實(shí)現(xiàn)前端交互。
Python常見(jiàn)的GUI庫(kù)
- TKinter:基于Tk的Python庫(kù),這是Python官方采用的標(biāo)準(zhǔn)庫(kù),優(yōu)點(diǎn)是作為Python標(biāo)準(zhǔn)庫(kù)、穩(wěn)定、發(fā)布程序較小,缺點(diǎn)是控件相對(duì)較少;
- wxPython:基于wxWidgets的Python庫(kù),優(yōu)點(diǎn)是控件比較豐富、缺點(diǎn)是穩(wěn)定性相對(duì)差點(diǎn)、文檔少、用戶少;
- pyQT5,Pyside2:基于Qt的Python庫(kù),優(yōu)點(diǎn)是控件比較豐富、跨平臺(tái)體驗(yàn)好、文檔完善、用戶多、缺點(diǎn)是庫(kù)比較大,發(fā)布出來(lái)的程序比較大;
- Qt Designer:Qt是一個(gè)1991年由Qt Company開(kāi)發(fā)的跨平臺(tái)C++圖形用戶界面應(yīng)用程序開(kāi)發(fā)框架;
- PyQT5:"Riverbank Computing"公司早期的python GUI開(kāi)發(fā)工具庫(kù),是QT與Python的結(jié)合,但并非Qt公司出品,屬于“義子”;
- Pyside2:2018年7月,Qt公推出的工具庫(kù),它提供了對(duì)Qt5.12+完整框架的訪問(wèn),簡(jiǎn)單點(diǎn)來(lái)說(shuō)就是在Python下使用Qt,即Qt的“親兒子”;使用上PyQt5與PySide2差別很小,接口調(diào)用幾乎一模一樣。
程序打包工具:Pyinstaller
下圖為Python桌面應(yīng)用軟件開(kāi)發(fā)大體的技術(shù)架構(gòu)。
圖1 軟件技術(shù)架構(gòu)
二、Pyside2&Qt designer
(1)PySide2——控件
圖形界面的工具基礎(chǔ):控件(widget)、信號(hào)(signal)與槽(solt),控件表示前端界面可顯示/操作/交互的元素,如按鈕、輸入控件、展示控件等,供用戶點(diǎn)擊、接受用戶輸入、展示內(nèi)容、存放其它控件。
PySide2的安裝:
pip install PySide2 -i https://pypi.tuna.tsinghua.edu.cn/simple/
下面為一個(gè)PySide2程序的實(shí)現(xiàn)流程:
1.定義一個(gè)應(yīng)用
2.定義主窗口
3.定義需要的控件
4.執(zhí)行應(yīng)用,進(jìn)入事件循環(huán)
# -*- coding: utf-8 -*- """ # @file name : 01_helloworld.py # @brief : 使用pyside編寫第一個(gè)軟件 """ from PySide2.QtWidgets import QApplication, QMainWindow, QTextBrowser, QLabel if __name__ == "__main__": app = QApplication([]) # UI應(yīng)用程序管理應(yīng)用 # ================================================ # 1. 定義主窗口 window = QMainWindow() # 2. 定義文本框顯示 label = QLabel(window) label.setText("Hello World!") # 3. 窗口顯示 window.show() # ================================================ app.exec_() # 進(jìn)入QApplication的事件處理循環(huán)
圖2 PySide2實(shí)現(xiàn)第一個(gè)GUI界面
(2)PySide2——信號(hào)(signal)與槽(slot)
用戶對(duì)圖形界面的控件操作就會(huì)產(chǎn)生信號(hào),程序應(yīng)能接收識(shí)別信號(hào),并進(jìn)行相應(yīng)的處理。特點(diǎn)信號(hào)的處理函數(shù)稱為槽。
按鈕被點(diǎn)擊時(shí),向程序發(fā)出信號(hào),程序自動(dòng)執(zhí)行btn_slot函數(shù)。
# -*- coding: utf-8 -*- """ # @file name : 02_signal&slot.py # @brief : 了解信號(hào)與槽 """ from PySide2.QtWidgets import QApplication, QMainWindow, QPushButton, QLineEdit if __name__ == "__main__": app = QApplication([]) # UI應(yīng)用程序管理應(yīng)用 # ================================================ # first. 定義主窗口 window = QMainWindow() window.resize(500, 400) window.move(300, 310) # 2. 定義按鈕控件 def btn_slot(): print("用戶點(diǎn)擊了按鈕,將執(zhí)行xxx") btn = QPushButton("我的按鈕", window) btn.clicked.connect(btn_slot) # 3. 單行文本框 def text_slot(): text = text_edit.text() print("檢測(cè)到文本框變動(dòng),當(dāng)前文本框信息為:{}".format(text)) text_edit = QLineEdit(window) text_edit.move(100, 0) text_edit.setPlaceholderText('請(qǐng)輸入信息...') text_edit.textChanged.connect(text_slot) # 窗口顯示 window.show() # ================================================ app.exec_() # 進(jìn)入QApplication的事件處理循環(huán)
圖3PySide2實(shí)現(xiàn)第二個(gè)GUI界面
(3)常用控件
1.按鈕:btn = QPushButton(“我的按鈕”,window)
2.單行文本框:text_edit = LineEdit(window)
3.標(biāo)簽顯示:label = QLabel(window)
4.文件選擇:path_file,filetype = QFileDialog.getOpenFileName(window,"選取文件","./","All File(*);;Text Files(*.jpg)")
(4)Qt Designer
Qt Designer可以通過(guò)拖曳的方式完成復(fù)雜的界面設(shè)計(jì),完成控件設(shè)計(jì)。Qt Designer生成的UI界面是一個(gè)后綴為.ui的文件,其實(shí)是一個(gè)XML文件。通過(guò)使用pyuic5命令將.ui文件轉(zhuǎn)換成.py文件,然后將.py文件引入到自定義的Python代碼中。主要分為以下四步:
- 安裝:隨著pyside2安裝時(shí),自動(dòng)安裝
- 啟動(dòng):Python安裝目錄下Scripts\pyside2-designer.exe
- 轉(zhuǎn)換:pyside2-uic xxx.ui > xxx.py
- 使用:在QMainWindow中初始化xxx.py中的控件,然后定義槽函數(shù)
圖4 Qt Designer設(shè)計(jì)流程
三、模型封裝部署
封裝--面向?qū)ο笕筇匦灾唬嫦驅(qū)ο螅∣bject Oriented Programming)的三大特性如下:
- 封裝(Encapsulation):隱藏對(duì)象的屬性和實(shí)現(xiàn)細(xì)節(jié),僅對(duì)外提供公共訪問(wèn)方式;
- 繼承(Inheritance):使用已存在的類定義作為基礎(chǔ)建立新類的方法;
- 多態(tài)(Polymorphism):“多種狀態(tài)”,接口的多種不同的實(shí)現(xiàn)方式即為多態(tài);
類的設(shè)計(jì)三要素:
- 類名:這類事物的名字;
- 屬性:這類事物具有什么樣的特征;
- 方法:這類事物具有什么樣的行為;
圖5封裝模型的過(guò)程
- 類名:Predictor;
- 屬性:model,path_ckpt,device,transform;
- 方法:preprocess,inference,get_model,get_transform;
四、Pyinstaller
Pyinstaller是一個(gè)用來(lái)將Python程序打包成一個(gè)獨(dú)立可執(zhí)行軟件包,支持Windows、Linux和Mac OS,Pyinstaller可以讀取您編寫的Python腳本。
Pyinstaller分析代碼執(zhí)行所需的所有模塊,然后將這些文件的副本和Python解釋器一起放在單個(gè)文件夾中,或者在單個(gè)可執(zhí)行文件中。
Pyinstaller的安裝:
pip install pyinstaller -i https://pypi.tuna.tsinghua.edu.cn/simple/
軟件打包執(zhí)行命令: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
常用參數(shù):
-F,-onefile產(chǎn)生單個(gè)的可執(zhí)行文件
-p,設(shè)置python導(dǎo)入模塊的路徑(和設(shè)置pythonpath環(huán)境變量的作用相似)
--noconsole軟件啟動(dòng)時(shí)不顯示命令窗
五、總結(jié)
到此這篇關(guān)于Python詳細(xì)介紹模型封裝部署流程的文章就介紹到這了,更多相關(guān)Python模型封裝內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python爬取網(wǎng)頁(yè)版QQ空間,生成各類圖表
最近python課程學(xué)完了,琢磨著用python點(diǎn)什么東西,經(jīng)過(guò)一番搜索,盯上了QQ空間,本文主要講述了如何爬取網(wǎng)頁(yè)版QQ空間,并生成詞云圖、柱狀圖、折線圖、餅圖的各種示例代碼2021-06-06Pymysql實(shí)現(xiàn)往表中插入數(shù)據(jù)過(guò)程解析
這篇文章主要介紹了Pymysql實(shí)現(xiàn)往表中插入數(shù)據(jù)過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-06-06Python學(xué)習(xí)之名字,作用域,名字空間(下)
這篇文章主要介紹了Python學(xué)習(xí)之名字,作用域,名字空間,緊接上一篇文章內(nèi)容展開(kāi)全文,需要的小伙伴可以參考一下,希望對(duì)你的學(xué)習(xí)有所幫助2022-05-05pytorch 指定gpu訓(xùn)練與多gpu并行訓(xùn)練示例
今天小編就為大家分享一篇pytorch 指定gpu訓(xùn)練與多gpu并行訓(xùn)練示例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-12-12自然語(yǔ)言處理之文本熱詞提取(含有《源碼》和《數(shù)據(jù)》)
這篇文章主要介紹了自然語(yǔ)言處理之文本熱詞提取,主要就是通過(guò)jieba的posseg模塊將一段文字分段并賦予不同字段不同意思,然后通過(guò)頻率計(jì)算出熱頻詞,需要的朋友可以參考下2022-05-05Python實(shí)現(xiàn)對(duì)比兩個(gè)Excel數(shù)據(jù)內(nèi)容并標(biāo)記出不同
日常工作中需要對(duì)比兩個(gè)Excel工作表中的數(shù)據(jù)差異是很不方便的,使用python來(lái)做就比較簡(jiǎn)單了!本文為大家介紹了python實(shí)現(xiàn)對(duì)比兩個(gè)Excel的數(shù)據(jù)內(nèi)容并標(biāo)記出不同數(shù)據(jù)的示例代碼,需要的可以參考一下2022-12-12python client使用http post 到server端的代碼
python client使用 http post 到server端的代碼,供大家學(xué)習(xí)參考2013-02-02