pyinstaller打包可執(zhí)行程序過(guò)程中的常見(jiàn)錯(cuò)誤解決
pyinstaller作為一個(gè)優(yōu)秀的三方庫(kù),可以將你的程序打包成為windows可執(zhí)行文件(exe),下面對(duì)使用過(guò)程中可能會(huì)出現(xiàn)的問(wèn)題進(jìn)行解答:
1、打包流程
pyinstaller的打包流程主要可以分成兩部分:
1.1、生成配置文件(xx.spec)
首先在你的電腦上裝好pyinstaller程序庫(kù),通過(guò)pip安裝即可,然后進(jìn)入你想打包程序所在的路徑,
例如你想打包pickme.py,使用如下命令生成配置文件:
pyi-makespec pickme.py
然后你就可以在pickme.py的同級(jí)目錄中查看到pickme.spec的文件,該文件是你打包pickme.py文件的配置文件,里面包含打包相關(guān)的所有配置。
1.2、生成可執(zhí)行文件(xx.exe)
1.1執(zhí)行過(guò)后,使用如下命令:
pyinstaller pickme.spec
該命令即可將你運(yùn)行pickme.py文件所需的環(huán)境全部進(jìn)行打包,這塊切記:打包過(guò)程中生成build與dist文件夾,dist文件夾包含你所打包程序的一個(gè)文件夾,里面包含程序運(yùn)行依賴(相當(dāng)于對(duì)你環(huán)境的備份,確保移植到?jīng)]有環(huán)境的電腦上依然可以使用),例如我的dist文件夾目錄如下:
圖1 dist文件目錄??????
圖1為我進(jìn)行打包時(shí)的示例,我的dist文件夾包含baseline_model_run_new文件夾(是由于我打包的程序名字是baseline_model_run_new.py,具體文件夾名字跟你們打包的程序名字一致),打開(kāi)baseline_model_run_new文件夾即為圖1所示,由圖1可知,其中包含了紅色框框的exe文件及許許多多依賴文件,這種才是正確的,如果你的dist文件夾中僅有exe文件,那么別人是沒(méi)辦法運(yùn)行你的exe文件,因?yàn)闆](méi)有打包環(huán)境,請(qǐng)按照1.1與1.2重新操作。
2、打包程序需要讀取外部數(shù)據(jù)(額外讀取數(shù)據(jù))
在深度學(xué)習(xí)或者機(jī)器學(xué)習(xí)過(guò)程中避免不了會(huì)涉及讀取額外的數(shù)據(jù),那么這塊配置不好就會(huì)導(dǎo)致別人運(yùn)行你的exe文件時(shí)出現(xiàn)圖2的效果:
圖2 exe文件數(shù)據(jù)錯(cuò)誤
圖2中展示的是程序需要讀取額外數(shù)據(jù)的錯(cuò)誤,程序在本地運(yùn)行沒(méi)有任何問(wèn)題,但一打包后問(wèn)題頻出,各種找不到文件,這種問(wèn)題主要是因?yàn)閿?shù)據(jù)路徑以及配置的問(wèn)題,直接上代碼說(shuō)明。
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文件會(huì)自動(dòng)生成,不同的是第五行的datas列表,默認(rèn)它是一個(gè)空列表,需要什么文件得自己添加進(jìn)去,例如我的程序讀取train_data.txt文件,存放位置是:py文件與txt文件同級(jí)目錄存放,那么寫法如上,同時(shí)可能還需要深度學(xué)習(xí)的模型文件,同理可得。
然后保存spec文件,執(zhí)行如下命令:
pyinstaller pickme.spec
重新編譯spec文件,即可打包,打包完成的一定與圖1相似,一定要包含相關(guān)環(huán)境?。?!
3、他人運(yùn)行閃退的問(wèn)題
你信心滿滿的把打包后的文件發(fā)給同學(xué)時(shí),他一打開(kāi)就閃退,而你也設(shè)置了input這些,這是為什么呢?這塊是你可能只發(fā)了exe文件,而沒(méi)有相關(guān)環(huán)境,此時(shí)把dist文件夾全部壓縮發(fā)給你的同學(xué),再讓他執(zhí)行exe文件即可,避免了閃退的問(wèn)題 。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
python實(shí)現(xiàn)文件助手中查看微信撤回消息
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)文件助手中查看微信撤回消息,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-04-04Python3爬蟲使用Fidder實(shí)現(xiàn)APP爬取示例
這篇文章主要介紹了Python3爬蟲使用Fidder實(shí)現(xiàn)APP爬取示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-11-11使用Mac時(shí)psycopg2導(dǎo)入PyCharm失敗的解決
這篇文章主要介紹了使用Mac時(shí)psycopg2導(dǎo)入PyCharm失敗的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-01-01在pycharm中創(chuàng)建django項(xiàng)目的示例代碼
這篇文章主要介紹了在pycharm中創(chuàng)建django項(xiàng)目的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-05-05python+selenium實(shí)現(xiàn)QQ郵箱自動(dòng)發(fā)送功能
這篇文章主要為大家詳細(xì)介紹了python+selenium實(shí)現(xiàn)QQ郵箱自動(dòng)發(fā)送功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-01-01解決jupyter notebook import error但是命令提示符import正常的問(wèn)題
這篇文章主要介紹了解決jupyter notebook import error但是命令提示符import正常的問(wèn)題,具有很好的參考2020-04-04