在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

PyQT5+OpenCV開發的應用如何打包發布?

OpenCV學堂 ? 來源:OpenCV學堂 ? 作者:OpenCV學堂 ? 2022-10-25 09:40 ? 次閱讀

打包工具選擇

我自己用PyQT5寫了一個應用程序,基本上都寫好了,到了打包發布這個環節,我知道的有兩個工具可以幫我打包分別是

Pyinstaller
Cython
pyinstaller會給我打包成一個exe文件,把python解釋器、所有依賴包、各種DLL都打包在里面,然后最終出來一個exe文件,聽上去是很好。 Cython會給打包成pyd文件,然后依靠包導入的方式完成啟動,不會生成exe文件,聽上去沒有pyinstaller好 兩個工具的安裝都十分方便快捷:
pip install pyinstaller
pip install Cython
這兩個我都測試了,最終我選擇用Cython完成了打包發布。為什么不用pyinstaller,打包出來的exe文件比較大,然后各種命令行操作我也不太熟悉,已經學廢了。然后打包完成之后各種DLL無法load跟找不到,時間不等人啊!最重要的,pyinstaller打包完成exe其實就是一個壓縮包,特別容易被反編譯跟逆向工程取得源碼!誰讓我已經用過這招,所以我猜別人也會用。 選擇Cython是轉C然后編譯生成的,想要逆向是十分困難,源碼保護會好點,另外Cython打包只要一個腳本運行一下就好啦,這個腳本還是我從網上的來的,感謝這個腳本作者!腳本隨便改了改,就可以直接使用了。

打包流程與目錄結構

在開始打包之前,先把一些非源碼的文件整理好,放在項目的資源文件夾下面,我有兩個資源文件夾分別是images跟models,它們就不用打包了。然后我把我的五個源碼文件夾

4c9391a0-5392-11ed-a3b6-dac502259ad0.png

以dlcore為例,修改腳本,運行package_installer,腳本我也貼出來,有需求的自取,放到跟項目同層目錄下面,會自動創建build文件夾的。

importsys,os,shutil,time
fromdistutils.coreimportsetup
fromCython.Buildimportcythonize

start_time=time.time()
curr_dir=os.path.abspath('.')
parent_path=sys.argv[1]iflen(sys.argv)>1else""
setup_file=__file__.replace('/','\')
build_dir="build"
build_tmp_dir=build_dir+"/temp"

s="#cython:language_level=3"


defget_py(base_path=os.path.abspath('.'),parent_path='',name='ui',excepts=(),copyOther=False,delC=False):
"""
獲取py文件的路徑
:parambase_path:根路徑
:paramparent_path:父路徑
:paramexcepts:排除文件
py文件的迭代器
"""
full_path=os.path.join(base_path,parent_path,name)
forfilenameinos.listdir(full_path):
full_filename=os.path.join(full_path,filename)
ifos.path.isdir(full_filename)andfilename!=build_dirandnotfilename.startswith('.'):
forfinget_py(base_path,os.path.join(parent_path,name),filename,excepts,copyOther,delC):
yieldf
elifos.path.isfile(full_filename):
ext=os.path.splitext(filename)[1]
ifext==".c":
ifdelCandos.stat(full_filename).st_mtime>start_time:
os.remove(full_filename)
eliffull_filenamenotinexceptsandos.path.splitext(filename)[1]notin('.pyc','.pyx'):
ifos.path.splitext(filename)[1]in('.py','.pyx')andnotfilename.startswith('__'):
path=os.path.join(parent_path,name,filename)
yieldpath
else:
pass


defpack_pyd():
#獲取py列表
module_list=list(get_py(base_path=curr_dir,parent_path=parent_path,excepts=(setup_file,)))
try:
setup(
ext_modules=cythonize(module_list,compiler_directives={'language_level':"3"}),
script_args=["build_ext","-b",build_dir,"-t",build_tmp_dir],
)
exceptExceptionasex:
print("error!",str(ex))
else:
module_list=list(get_py(base_path=curr_dir,parent_path=parent_path,excepts=(setup_file,),copyOther=True))

module_list=list(get_py(base_path=curr_dir,parent_path=parent_path,excepts=(setup_file,),delC=True))
ifos.path.exists(build_tmp_dir):
shutil.rmtree(build_tmp_dir)

print("complate!time:",time.time()-start_time,'s')


defdelete_c(path='.',excepts=(setup_file,)):
'''
刪除編譯過程中生成的.c文件
:parampath:
:paramexcepts:

'''
dirs=os.listdir(path)
fordirindirs:
new_dir=os.path.join(path,dir)
ifos.path.isfile(new_dir):
ext=os.path.splitext(new_dir)[1]
ifext=='.c':
os.remove(new_dir)
elifos.path.isdir(new_dir):
delete_c(new_dir)


if__name__=='__main__':
try:
pack_pyd()
exceptExceptionase:
print(str(e))
finally:
delete_c()
最終build文件夾中生成對應的pyd文件如下:

4cdfd5d8-5392-11ed-a3b6-dac502259ad0.png

運行完這些源碼文件夾把得到pyd文件分別拷貝到另外一個目錄下對應文件夾中,最終我的打包好的目錄結構如下:

4e0ab554-5392-11ed-a3b6-dac502259ad0.png

其中requirements.txt里面是需要安裝第三方依賴庫,在該目錄運行命令行即可完成安裝:

pip install -r requirements.txt
參考readme文件,可以完成OpenVINO2022、TensorRT8.x配置支持。 我手寫了一個簡單startup.bat文件,雙擊startup.bat即可運行打包好的應用!
@echo "try to run openvm"
SET PYTHONPATH=.%PYTHONPATH%
cd ui
python application_ui.py

運行截圖如下:

4e1bdd84-5392-11ed-a3b6-dac502259ad0.png

遇到的坑

最后說一下,我用cython打包遇到的一個大坑:

4e471ecc-5392-11ed-a3b6-dac502259ad0.png

我有個超類ImageTask,然后里面定義幾個抽象方法,其中一個方法名是exec,誰知道這個是cython無法解析的字符串,我猜可能因為代碼安全檢測無法通過,所以一直給報截圖的錯誤,后面我把這個方法名稱從exec改成t_exec就可以把對應的py文件轉pyd文件了。

使用pyinstaller打包時候會遇到

Error: geos_c.dll not found, required by hook-shapely.py

去下載geos_c.dll https://www.dll-files.com/geos_c.dll.html

然后扔到windows/system32里面去就好啦!

審核編輯:湯梓紅
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • OpenCV
    +關注

    關注

    31

    文章

    642

    瀏覽量

    42241
  • python
    +關注

    關注

    56

    文章

    4822

    瀏覽量

    85860
  • pyqt5
    +關注

    關注

    0

    文章

    25

    瀏覽量

    3475

原文標題:PyQT5+OpenCV開發的應用如何打包發布?

文章出處:【微信號:CVSCHOOL,微信公眾號:OpenCV學堂】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    可視可交互!H618上用OpenCV讀取圖像顯示到PyQt5窗口上

    這里分享一個代碼,功能是使用圖像處理庫opencv從攝像頭獲取數據,縮放后從pyqt5的窗口中顯示出來。安裝opencvsudo pip3 install opencv-python創建一個
    發表于 01-10 09:55

    求助工具里的網頁發布打包問題

    小編遇到現在將程序打包成安裝包以后,其安裝以后工具選項里沒有網頁發布工具,怎么將網頁發布功能打包進安裝程序?求各路大神告知
    發表于 08-31 09:35

    【Firefly RK3399試用體驗】第二篇:PyQt5大戰點燈

    ,使用命令apt install python3-pyqt5Ubuntu里也提供了一些IDE開發工具如IDLE、Spyder等等,此處不詳細介紹它們安裝過程。之后我們開始編寫Pyqt5點燈,需要的前提
    發表于 06-12 07:49

    OpenCV學習之路--5--OpenCV3.4.10的ARM版本移植到開發板 精選資料分享

    開發板:迅為IMX6Q移植QTE5.7編譯好的ARM版本OpenCV3.4.10文件:OpenCV3.4.10 ARM版編譯好的OpenCV依賴庫文件:1.將/usr/local/ar
    發表于 07-16 06:55

    如何使用Python配合PyQT5模塊來開發圖形化應用程序

    By Toradex秦海1).簡介隨著Python在互聯網人工智能領域的流行,大家也慢慢感受到Python開發的便利,本文就基于嵌入式ARM平臺,介紹使用Python配合PyQT5模塊來開發圖形化
    發表于 12-24 06:41

    OpenCV開發環境的配置

    OpenCV3編程入門》書本配套源代碼:OpenCV開發環境的配置
    發表于 06-06 15:20 ?8次下載

    PyQt5的中文教程電子書免費下載

     本教程的目的是帶領你入門PyQt5。教程內所有代碼都在Linux上測試通過。PyQt4 教程是PyQt4的教程,PyQt4是一個Python(同時支持 2和3)版的Qt庫。
    發表于 08-06 08:00 ?19次下載
    <b class='flag-5'>PyQt5</b>的中文教程電子書免費下載

    MAC-OS-X-下用py2app打包PYQT程序

    MAC-OS-X-下用py2app打包PYQT程序(茂碩電源技術參數)-該文檔為MAC-OS-X-下用py2app打包PYQT程序講解教程,是份不錯的參考資料,感興趣的可以下載看看,,
    發表于 09-24 15:33 ?4次下載
    MAC-OS-X-下用py2app<b class='flag-5'>打包</b><b class='flag-5'>PYQT</b>程序

    notepad-pyqt5 PyQt記事本

    ./oschina_soft/gitee-notepad-pyqt5.zip
    發表于 05-24 09:20 ?4次下載
    notepad-<b class='flag-5'>pyqt5</b> <b class='flag-5'>PyQt</b>記事本

    運用JNI連結OpenCV開發C++并打包成aar lib的使用教學

    本身是作影像視覺相關的工作,多數時候都使用 Python 作為開發語言,但OpenCV 本身是C++開發,學 C++ 應該有幫助。
    的頭像 發表于 08-15 09:24 ?1932次閱讀

    OpenCV+PyQT5開發桌面應用幾個重要的坑與解決

    大概去年八月份的時候,我打算用OpenCV+PyQT5開發一套OpenCV教學演示與快速驗證桌面軟件,說實話那個時候我對PyQT5的理解就是Hello World水平。經過一年多
    的頭像 發表于 12-13 11:55 ?2045次閱讀

    PyQT5+OpenCV多線程協作演示

    學習多線程最典型的問題就是如何在多個線程之間傳遞消息與寫作,PyQT5的線程支持在不同線程之間傳遞信號觸發事件,實現多個線程之間的協助,完成諸如生產者-消費者這樣經典的多線程協作。本文將通過QThread與信號槽機制構建一個生產者-消費者模型,演示多個線程之間的協作。
    的頭像 發表于 03-08 14:58 ?1539次閱讀

    PyQT開發上位機教程

    ,兩個都需要安裝,需要記住安裝的位置,一會兒需要設置環境變量。 pip install PyQt5pip install PyQt5 - tools ( DemoProject )E : \WorkSp
    發表于 05-08 09:59 ?3次下載
    <b class='flag-5'>PyQT</b><b class='flag-5'>開發</b>上位機教程

    使用pycharm開發上位機配置pyqt5的環境

    在上位機的開發過程中,使用QT的圖形化界面,是開發上位機最好最簡單的選擇,因此我將講述配置pyqt5的環境。 軟件安裝: 安裝:pycharm的社區2021.02版 QT(安裝參考https
    發表于 05-29 16:12 ?0次下載
    使用pycharm<b class='flag-5'>開發</b>上位機配置<b class='flag-5'>pyqt5</b>的環境

    基于PyQT5與ONNXRUNTIME實現風格遷移應用

    2023年一月份跟二月份創建了一個PyQT5人工智能軟件開發系列的文章系列,過去的兩個月都沒怎么更新,心里一直想有時間繼續更新下去,今天又更新了一篇,基于PyQT5實現多線程、界面化、風格遷移模型的實時推理。
    的頭像 發表于 10-25 10:35 ?630次閱讀
    基于<b class='flag-5'>PyQT5</b>與ONNXRUNTIME實現風格遷移應用
    主站蜘蛛池模板: 欧美一级视频免费看 | 中文字幕成人乱码在线电影 | 性欧美性free| 国产高清色视频免费看的网址 | 免费看真人a一级毛片 | 欧亚精品卡一卡二卡三 | 日本一区二区三区在线 视频观看免费 | 孩交啪啪网址 | 天天干夜夜操美女 | 免费视频一区二区性色 | 精品看片 | 国产一区二区三区在线观看影院 | 天天色官网 | 国产精品免费久久久免费 | 天天操天天干天天 | 九色综合九色综合色鬼 | videosxxoo18在线 | 欧美日韩视频综合一区无弹窗 | 国产精品欧美激情在线播放 | 亚洲娇小性色xxxx | 男人不识本网站上遍色站也枉然 | 国产又色又爽又黄的网站在线一级 | 福利视频自拍偷拍 | 欧美污视频网站 | 尤物蜜芽福利国产污在线观看 | 成人五级毛片免费播放 | 欧美一区二区视频在线观看 | 日韩在线看片 | 中文字幕欧美成人免费 | 欧美整片第一页 | 婷婷色在线观看 | 欧美极品一区 | 影音先锋色偷偷米奇四色 | 天天操天天干天天透 | 激情在线播放免费视频高清 | 色多视频| 天天干免费视频 | 蜜月mv国产精品 | 国产成人精品免费视频大全可播放的 | 亚洲人成网站在线观看妞妞网 | 婷婷五月天.com |