PyInstaller說(shuō)明
PyInstaller的下載的話直接可以看官網(wǎng)的說(shuō)明:http://www.pyinstaller.org/
//win + r 打開(kāi)運(yùn)行 輸入 cmd 輸入以下代碼
pip install pyinstaller
//安裝完成之后切換到你的目標(biāo)文件的目錄下,運(yùn)行如下代碼生成執(zhí)行文件
pyinstaller yourprogram.py
然后就可以生成可執(zhí)行文件衣吠。生成的可執(zhí)行文件在dist這個(gè)文件夾里面
pyinstaller還有一些參數(shù)可供選擇(具體使用之后慢慢更新)
-F 表示生成單個(gè)可執(zhí)行文件
-w 表示去掉控制臺(tái)窗口暖夭,這在GUI界面是非常有用钝诚。不過(guò)如果是命令行程序的話那就刪除這個(gè)選項(xiàng)寞奸!
-p 表示你自己定義需要加載的類路勁茵臭,一般情況下用不到
-i 表示可執(zhí)行文件的圖標(biāo)
正常打包輸出:
pyinstaller -F xxxx.py
設(shè)置圖標(biāo)輸出:
pyinstaller -i xxx.ico -F xxxx.py
增加程序版本信息:
準(zhǔn)備好版本信息文件:file_version_info.txt
版本信息文件可以通過(guò)pyinstaller自帶工具(pyi-grab_version)獲裙潦荨:
命令:pyi-grab_version.exe xxxx.exe file_version_info.txt
其中xxxx.exe是有軟件版本信息的執(zhí)行文件。
這樣可以通過(guò)編輯file_version_info.txt唉匾,獲得自己的版本信息文件打包時(shí)用參數(shù)--version-file :
pyinstaller --version-file=file_version_info.txt test.py加版本信息屉符,加ico,單文件的打包命令
pyinstaller --version-file=file_version_info.txt -i setup.ico -F main.py
錯(cuò)誤
-
RecursionError: maximum recursion depth exceeded
這個(gè)遞歸錯(cuò)誤,大概率是自己調(diào)用自己太多次導(dǎo)致的人乓。解決辦法:
pyinstaller 之后會(huì)生成一個(gè)和xxx.py文件同名的 xxx.spec 文件
打開(kāi)xxx.spec文件,在行首導(dǎo)入sys包都毒,然后設(shè)置一下遞歸調(diào)用的限制次數(shù)色罚,可以大一點(diǎn)。import sys sys.setrecursionlimit(100000) block_cipher = None
修改之后账劲,然后 pyinstall -F xxx.spec就行了
AttributeError: module 'win32ctypes.pywin32.win32api' has no attribute 'error'
這個(gè)錯(cuò)誤是因?yàn)閳D標(biāo)文件沒(méi)有使用.ico文件造成的-
No such file or directory: ‘C:\Users\user\AppData\Local\Temp_MEI106802\abcd\yyyy
新建hook-abcd.py文件
在py文件中輸入:from PyInstaller.utils.hooks import collect_data_files datas = collect_data_files("abcd")
保存后將此py文件放入Pyinstaller下的hook的文件夾中戳护,重新打包問(wèn)題解決。
-
打包成功瀑焦,但運(yùn)行時(shí)出現(xiàn)加載文件錯(cuò)誤
打印文件路徑顯示:C:\Users\user\AppData\Local\Temp_MEI213162\xxxxxx解決辦法:
if getattr(sys, 'frozen', False): absPath = os.path.dirname(os.path.abspath(sys.executable)) elif __file__: absPath = os.path.dirname(os.path.abspath(__file__))
這樣根據(jù)運(yùn)行方式腌且,定義相對(duì)路徑,問(wèn)題解決榛瓮。