上一節,我們已經完成了攝像頭界面程式的編寫,點選運作程式後就可以看到正常工作的界面程式了,具備了實時顯示攝像頭采集到的圖像,調整攝像頭的亮度、增益等參數,改變圖像的顔色、儲存截圖或錄像等功能。然而,由于程式運作時會用到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
,如下圖所示,打包程式開始自動運作。
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsICM38FdsYkRGZkRG9lcvx2bjxiNx8VZ6l2cs0TPB10MnR0T3FkeNBDOsJGcohVYsR2MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zROBlL3YjM5UDNyATM0ITMwkTMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
其中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中,如下圖所示。
儲存後,在cmd視窗中在此運作
pyinstaller -F -w QtUi.py
指令,可以發現那些warning沒有了,cmd指令顯示打包成功。然後再程式所在的檔案夾中會生成dist、build等新的檔案夾,在dist檔案夾裡就是我們打包好的exe檔案了。至此我們的攝像頭控制界面程式就大功告成啦。