天天看點

PyQt5+QtDesigner編寫攝像頭界面程式(五)——用pyinstaller将py檔案打包成exe

上一節,我們已經完成了攝像頭界面程式的編寫,點選運作程式後就可以看到正常工作的界面程式了,具備了實時顯示攝像頭采集到的圖像,調整攝像頭的亮度、增益等參數,改變圖像的顔色、儲存截圖或錄像等功能。然而,由于程式運作時會用到python、opencv、pyqt5等可能是我們自己電腦上獨有的工具,一旦程式移植到别的電腦上就無法運作了。為了讓我們編寫的程式在别的電腦上也能正常運作,我們就需要将程式打包成exe程式。本節将介紹使用pyinstaller來打包我們的python程式。

在第一節裡我們已經介紹過pyinstaller的安裝方法了。方法很簡單,如果我們已經安裝好python和pip工具了,隻要在cmd指令視窗輸入

pip install pyinstaller

即可自動完成安裝。

安裝完成後,同樣在cmd視窗中,使用cd指令進入到我們編寫的主程式檔案所在的檔案夾。這裡,我檔案的路徑為D:\Python\PyQtTest,主程式的檔案名為QiUi.py,是以在指令視窗中輸入指令

pyinstaller -F -w QtUi.py

,如下圖所示,打包程式開始自動運作。

PyQt5+QtDesigner編寫攝像頭界面程式(五)——用pyinstaller将py檔案打包成exe

其中pyinstaller的部分參數含義如下表所示,本例中

pyinstaller -F -w QtUi.py

的意思是将QtUi.py檔案打包成一個單獨的exe檔案,且程式運作時不使用cmd視窗。

參數 含義
-F 隻生成一個exe檔案
-distpath 指定生成exe存放的目錄
-workpath 指定編譯過程中臨時檔案的存放目錄
-D 建立一個目錄,包含exe檔案和依賴檔案
-i 指定exe圖示
-p 指定exe依賴的包、子產品
-clean 清理編譯時的臨時檔案
-c 使用控制台
-w 使用視窗

我在打包程式的過程中,産生了很多的warning,warning的内容如下所示,提示找不到相應的函數庫。

101524 WARNING: lib not found: api-ms-win-crt-string-l1-1-0.dll dependency of C:\users\chengjingxin\appdata\local\programs\python\python36\lib\site-packages\PyQt5\Qt\plugins\platforms\qwindows.dll
102471 WARNING: lib not found: api-ms-win-crt-stdio-l1-1-0.dll dependency of C:\users\chengjingxin\appdata\local\programs\python\python36\lib\site-packages\PyQt5\Qt\plugins\platforms\qwindows.dll
103298 WARNING: lib not found: api-ms-win-crt-convert-l1-1-0.dll dependency of C:\users\chengjingxin\appdata\local\programs\python\python36\lib\site-packages\PyQt5\Qt\plugins\platforms\qwindows.dll
104276 WARNING: lib not found: api-ms-win-crt-runtime-l1-1-0.dll dependency of C:\users\chengjingxin\appdata\local\programs\python\python36\lib\site-packages\PyQt5\Qt\plugins\platforms\qwindows.dll
105170 WARNING: lib not found: api-ms-win-crt-heap-l1-1-0.dll dependency of C:\users\chengjingxin\appdata\local\programs\python\python36\lib\site-packages\PyQt5\Qt\plugins\platforms\qwindows.dll
105986 WARNING: lib not found: api-ms-win-crt-utility-l1-1-0.dll dependency of C:\users\chengjingxin\appdata\local\programs\python\python36\lib\site-packages\PyQt5\Qt\plugins\platforms\qwindows.dll
106972 WARNING: lib not found: api-ms-win-crt-math-l1-1-0.dll dependency of C:\users\chengjingxin\appdata\local\programs\python\python36\lib\site-packages\PyQt5\Qt\plugins\platforms\qwindows.dll
           

通過網上查找原因發現,這是由于pyinstaller的搜尋路徑沒有包括這些函數庫所在的路徑。解決辦法是手動添加這些庫的路徑,如下圖所示,運作過一次上述pyinstaller指令後,在程式所在的檔案夾中會生成一個QtUi.spec檔案,使用記事本打開該檔案,将路徑

C:\Windows\SysWOW64\downlevel

C:\Windows\System32\downlevel

添加到pathex中,如下圖所示。

PyQt5+QtDesigner編寫攝像頭界面程式(五)——用pyinstaller将py檔案打包成exe

儲存後,在cmd視窗中在此運作

pyinstaller -F -w QtUi.py

指令,可以發現那些warning沒有了,cmd指令顯示打包成功。然後再程式所在的檔案夾中會生成dist、build等新的檔案夾,在dist檔案夾裡就是我們打包好的exe檔案了。至此我們的攝像頭控制界面程式就大功告成啦。