使用 Pyinstaller 打包包含 pyqt5 庫爬蟲程序總結

使用 Pyinstaller 打包包含 pyqt5 庫爬蟲程序總結

python 和 pyinstaller 的安裝不再贅述

使用 pyinstaller 的打包基本上使用一個 -F 參數即可,這樣就會打包出一個單個可以運行的 exe;如果不指定,會打包出一整個文件夾

1. 碰見的第一個問題:RecursionError 遞歸報錯

參考鏈接:

https://blog.csdn.net/heruili/article/details/97274443

發生此類異常原因:python默認的遞歸深度是很有限的(默認是1000),因此當遞歸深度超過999的樣子,就會引發這樣的一個異常,而在打包過程中引入的包遞歸深度可能比默認深度大,因此會引發異常。

pyqt5 這個庫的遞歸深度可能比較深。

添加這個代碼即可解決

import sys

sys.setrecursionlimit(1000000) #例如這裏設置爲一百萬

但是打包命令Pyinstaller -F XXX.py ,該在哪裏加這部分代碼並沒有提及,通過大量查找終於發現瞭解決pyinstaller打包過程中出現該類異常解決的辦法:

執行pyinstaller -F XXX.py 它會在你的目錄文件生成XXX.spec文件,然後報錯,出現該類異常。
打開XXX.spec文件,在開頭添加上面兩行代碼。
繼續執行打包,但是還文件名:pyinstaller -F XXX.spec ,執行該文件

2. 打包GUI程序指定 pyqt5 所在路徑

參考鏈接:

https://www.cnblogs.com/DonetRen/p/10405395.html

打開cmd命令窗口,使用cd命令切換到.py文件所在路徑,然後使用

pyinstaller --paths C:Users......Python37/Lib/site-packages/PyQt5/Qt/bin -F -w --icon=note.ico main.py

命令進行打包,

其中,–paths用來設置PyQt的環境變量,-F表示生成單個exe可執行文件,-w表示窗體程序,–icon是設置exe的顯示圖標,main.py是GUI程序的入口

3. 打包完成運行 exe 報錯

參考鏈接:

https://blog.51cto.com/cfy10/2468597?source=dra

提示找不到模塊

ModuleNotFoundError: No module named 'pkg_resources.py2_warn'

根據這個博客,問題可能出在各個模塊之間版本不對應的情況,按照這個博主給出的配置

Python配置環境的版本。供大家參考
win10_64位 + python 3.6.8_64位 + Pywin32 227 + PyQt5 5.14.1 + opencv-python 3.4.5.20 + setuptools 44.0.0 + PyInstaller 3.6

win10_32位 + python 3.5.4_32位 + Pywin32 227 + PyQt5 5.14.1 + opencv-python 3.4.5.20 + setuptools 44.0.0 + PyInstaller 3.6
以上配置環境python包官網下載,模塊均pip install自動安裝依賴

對照後,降低 setuptools 的版本,打包成功可以運行

4. 未解決的問題

已經添加上了 -w 參數,不顯示黑窗口,但是運行還是顯示

在這裏插入圖片描述

pyinstaller 運行參數

與生成結果有關的參數

參數名 描述 說明
-D 生成one-folder的程序(默認) 生成結果是一個目錄,各種第三方依賴、資源和exe同時存儲在該目錄
-F 生成one-file的程序 生成結果是一個exe文件,所有的第三方依賴、資源和代碼均被打包進該exe內
–specpath 指定.spec文件的存儲路徑 默認:當前目錄
-n 生成的.exe文件和.spec的文件名 默認:用戶腳本的名稱,即main.py和main.spec

Windows和Mac特有的參數

參數名 描述 說明
-c 顯示命令行窗口 與-w相反,默認含有此參數
-w 不顯示命令行窗口 編寫GUI程序時使用此參數有用。
-i 爲main.exe指定圖標 pyinstaller -i beauty.ico main.py

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章