pyinstaller打包可執(zhí)行程序過程中的常見錯(cuò)誤解決
pyinstaller作為一個(gè)優(yōu)秀的三方庫,可以將你的程序打包成為windows可執(zhí)行文件(exe),下面對使用過程中可能會出現(xiàn)的問題進(jìn)行解答:
1、打包流程
pyinstaller的打包流程主要可以分成兩部分:
1.1、生成配置文件(xx.spec)
首先在你的電腦上裝好pyinstaller程序庫,通過pip安裝即可,然后進(jìn)入你想打包程序所在的路徑,
例如你想打包pickme.py,使用如下命令生成配置文件:
pyi-makespec pickme.py
然后你就可以在pickme.py的同級目錄中查看到pickme.spec的文件,該文件是你打包pickme.py文件的配置文件,里面包含打包相關(guān)的所有配置。
1.2、生成可執(zhí)行文件(xx.exe)
1.1執(zhí)行過后,使用如下命令:
pyinstaller pickme.spec
該命令即可將你運(yùn)行pickme.py文件所需的環(huán)境全部進(jìn)行打包,這塊切記:打包過程中生成build與dist文件夾,dist文件夾包含你所打包程序的一個(gè)文件夾,里面包含程序運(yùn)行依賴(相當(dāng)于對你環(huán)境的備份,確保移植到?jīng)]有環(huán)境的電腦上依然可以使用),例如我的dist文件夾目錄如下:

圖1 dist文件目錄??????
圖1為我進(jìn)行打包時(shí)的示例,我的dist文件夾包含baseline_model_run_new文件夾(是由于我打包的程序名字是baseline_model_run_new.py,具體文件夾名字跟你們打包的程序名字一致),打開baseline_model_run_new文件夾即為圖1所示,由圖1可知,其中包含了紅色框框的exe文件及許許多多依賴文件,這種才是正確的,如果你的dist文件夾中僅有exe文件,那么別人是沒辦法運(yùn)行你的exe文件,因?yàn)闆]有打包環(huán)境,請按照1.1與1.2重新操作。
2、打包程序需要讀取外部數(shù)據(jù)(額外讀取數(shù)據(jù))
在深度學(xué)習(xí)或者機(jī)器學(xué)習(xí)過程中避免不了會涉及讀取額外的數(shù)據(jù),那么這塊配置不好就會導(dǎo)致別人運(yùn)行你的exe文件時(shí)出現(xiàn)圖2的效果:

圖2 exe文件數(shù)據(jù)錯(cuò)誤
圖2中展示的是程序需要讀取額外數(shù)據(jù)的錯(cuò)誤,程序在本地運(yùn)行沒有任何問題,但一打包后問題頻出,各種找不到文件,這種問題主要是因?yàn)閿?shù)據(jù)路徑以及配置的問題,直接上代碼說明。
block_cipher = None
a = Analysis(['baseline_model_run_new.py'], ### 名稱不同
pathex=[],
binaries=[],
datas=[('train_data.txt','.'), ('model.pth', '.')], ### 內(nèi)容不同
hiddenimports=[],
hookspath=[],
runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher)上述代碼是spec文件中的部分內(nèi)容,第二行被打包的文件名稱根據(jù)你們所打包的py文件會自動(dòng)生成,不同的是第五行的datas列表,默認(rèn)它是一個(gè)空列表,需要什么文件得自己添加進(jìn)去,例如我的程序讀取train_data.txt文件,存放位置是:py文件與txt文件同級目錄存放,那么寫法如上,同時(shí)可能還需要深度學(xué)習(xí)的模型文件,同理可得。
然后保存spec文件,執(zhí)行如下命令:
pyinstaller pickme.spec
重新編譯spec文件,即可打包,打包完成的一定與圖1相似,一定要包含相關(guān)環(huán)境?。。?/p>
3、他人運(yùn)行閃退的問題
你信心滿滿的把打包后的文件發(fā)給同學(xué)時(shí),他一打開就閃退,而你也設(shè)置了input這些,這是為什么呢?這塊是你可能只發(fā)了exe文件,而沒有相關(guān)環(huán)境,此時(shí)把dist文件夾全部壓縮發(fā)給你的同學(xué),再讓他執(zhí)行exe文件即可,避免了閃退的問題 。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python數(shù)據(jù)分析與處理(二)——處理中國地區(qū)信息
這篇文章主要介紹了Python數(shù)據(jù)分析與處理-處理中國地區(qū)信息,上文介紹了北京高考分?jǐn)?shù)線統(tǒng)計(jì)分析,這篇文章依然圍繞Python數(shù)據(jù)分析與處理的相關(guān)資料來介紹處理中國地區(qū)信息,需要的朋友可以參考一下2021-12-12
Python設(shè)計(jì)模式之觀察者模式原理與用法詳解
這篇文章主要介紹了Python設(shè)計(jì)模式之觀察者模式,簡單講述了觀察者模式的概念、原理并結(jié)合實(shí)例形式分析了Python實(shí)現(xiàn)與使用方法,需要的朋友可以參考下2019-01-01
Python編程在flask中模擬進(jìn)行Restful的CRUD操作
今天小編就為大家分享一篇關(guān)于Python編程在flask中模擬進(jìn)行Restful的CRUD操作,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2018-12-12
Pytorch創(chuàng)建隨機(jī)值張量的過程詳解
這篇文章主要介紹了Pytorch創(chuàng)建隨機(jī)值張量的過程詳解,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-09-09
全面解析Python的While循環(huán)語句的使用方法
這篇文章主要介紹了全面解析Python的While循環(huán)語句的使用方法,是Python入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下2015-10-10
Python和Java的語法對比分析語法簡潔上python的確完美勝出
Python是一種廣泛使用的解釋型、高級編程、通用型編程語言,由吉多·范羅蘇姆創(chuàng)造,第一版發(fā)布于1991年。這篇文章主要介紹了Python和Java的語法對比,語法簡潔上python的確完美勝出 ,需要的朋友可以參考下2019-05-05

