亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

詳解pyinstaller生成exe的閃退問(wèn)題解決方案

 更新時(shí)間:2020年06月19日 10:19:54   作者:GaloisAlex  
這篇文章主要介紹了詳解pyinstaller生成exe的閃退問(wèn)題解決方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

簡(jiǎn)單模塊問(wèn)題

如果在 pyinstaller project.py 的過(guò)程中,出現(xiàn):

No module named 'xxx'

那就 pip install xxx 就行,比如:

$ pip install wxPython pypiwin32 tornado

這個(gè) pip 對(duì)應(yīng)于項(xiàng)目的虛擬環(huán)境。
其中 wxPython 對(duì)應(yīng) No module named 'wx'
其中 pypiwin32 對(duì)應(yīng) No module named 'win32com'
還有個(gè)老生常談的小問(wèn)題,提一下,避免萌新看的一頭霧水,比如有些包有別名,比如你并不能通過(guò) pip install wx 來(lái)解決 No module named 'wx' 的問(wèn)題。這需要一些經(jīng)驗(yàn),沒(méi)經(jīng)驗(yàn)的這些去搜索引擎搜索搜索就知道了,基本解決方法都是 pip install ...,其中 ... 是這個(gè)模塊的真名。

全網(wǎng)唯一答案系列

以上都是簡(jiǎn)單的問(wèn)題,如果不會(huì)出現(xiàn) No module named xxx 的問(wèn)題,就不用關(guān)心 pip install 了。
再遇到閃退等問(wèn)題可以加上命令參數(shù) -D
pyinstaller -D project.py,表示我們打包成一個(gè)文件夾,而不僅僅是個(gè) exe 文件,當(dāng)然這個(gè)項(xiàng)目文件夾在 dist 下面。

在每次重新打包之前,務(wù)必刪除項(xiàng)目中的 build、dist 目錄。

這時(shí)候還會(huì)碰到一些棘手的問(wèn)題,比如:

看最后的異常提示是 PyInstallerImportError 錯(cuò)誤,可以看到 sklearn 下面缺少 .libs/vcomp140.dll 文件,這是因?yàn)?pyinstaller 的執(zhí)行過(guò)程中,沒(méi)有把虛擬環(huán)境(你的項(xiàng)目開(kāi)發(fā)環(huán)境中 Lib/site-packages/ 內(nèi)的包)中的該依賴文件(vcomp140.dll)打包進(jìn)來(lái),這時(shí)候去原本我們的虛擬環(huán)境中找到這個(gè)文件,復(fù)制出來(lái),粘貼進(jìn)我們這個(gè)打包生成的文件夾內(nèi)對(duì)印的 ./sklearn 目錄下的對(duì)應(yīng)位置,但是我們看到這個(gè)目錄下面居然沒(méi)有 .libs 文件夾,那就在這里(./sklearn)創(chuàng)建一個(gè),然后把那個(gè)缺的依賴文件(vcomp140.dll)復(fù)制進(jìn)來(lái)就行。
可能看的會(huì)有點(diǎn)暈,這里需要耐心點(diǎn)看,為了避免文字過(guò)多產(chǎn)生的表達(dá)歧義,再?gòu)?qiáng)調(diào)一下思路:「把生成的項(xiàng)目文件夾中缺失的依賴文件,如 dll 文件;從開(kāi)發(fā)環(huán)境中的包里找到它,并復(fù)制進(jìn)來(lái)?!?/p>

打包調(diào)試的時(shí)候需要注意不要隱藏控制臺(tái),不然拿不到錯(cuò)誤信息,無(wú)法進(jìn)行下一步 debug 操作。

我們可以看到這個(gè)問(wèn)題被解決了,但是會(huì)有新的問(wèn)題,基本都是 sklearn 的問(wèn)題,這里只是枚舉我發(fā)生的問(wèn)題,如果你寫(xiě)的是別的項(xiàng)目,庫(kù)依賴也很嚴(yán)重,也會(huì)有這些問(wèn)題,可能不是 sklearn,總之肯定是某個(gè)包缺失依賴文件或模塊文件的問(wèn)題。

現(xiàn)在來(lái)看看新的報(bào)錯(cuò)信息:

這個(gè)問(wèn)題基本全網(wǎng)的答案都是諸如修改 project.spec 文件中的 a=Analysis(...) 選項(xiàng)的 hiddenimports 配置:

hiddenimports=['cython', 'sklearn', 'sklearn.utils._cython_blas'],

然后刪除 build、dist 后執(zhí)行:

$ pyinstaller -D project.spec

或者是直接給 pyinstaller 命令加參數(shù),比如這樣:

$ pyinstaller -F -w --hidden-import='sklearn.utils._cython_blas' --hidden-import='sklearn.neighbors.typedefs' --hidden-import='sklearn.neighbors.quad_tree' --hidden-import='sklearn.tree' --hidden-import='sklearn.tree._utils' project.py

如果你用這個(gè)方法解決不了,那就嘗試把缺失的模塊從開(kāi)發(fā)環(huán)境中的 site-packages 里復(fù)制出來(lái)粘貼進(jìn)我們生成的 ./dist/project/ 里面對(duì)應(yīng)的模塊所在位置(如果沒(méi)有找到對(duì)應(yīng)的路徑,不存在這個(gè)文件夾之類的,就如以上說(shuō)的建一個(gè) .libs/ 文件夾一樣創(chuàng)建一個(gè)。)
比如我的生成項(xiàng)目文件夾位于:
C:\Users\Galois\Documents\project\dist\project

當(dāng)然,我們需要的項(xiàng)目可執(zhí)行文件 exe 也在這個(gè)目錄下。
接下來(lái)的操作基本就是對(duì)這個(gè)目錄里面進(jìn)行粘貼缺失的模塊,根據(jù)異常報(bào)錯(cuò)信息,比如我們剛才得到的報(bào)錯(cuò)是:

ModuleNotFoundError: No module named 'sklearn.utils._cython_blas'

現(xiàn)在我們進(jìn)入兩個(gè)地方:
生成的項(xiàng)目中的目錄:
C:\Users\Galois\Documents\project\dist\project\sklearn\utils
開(kāi)發(fā)環(huán)境中的目錄(由于我不知道各位開(kāi)發(fā)環(huán)境怎樣,這里就直接用開(kāi)發(fā)環(huán)境的相對(duì)目錄來(lái)說(shuō)明路徑):
yourenv/Lib/site-packages/skearn/utils/

在這個(gè)開(kāi)發(fā)環(huán)境中的這個(gè)路徑我們會(huì)看到一些 pyd 文件,我們的操作諸如這張圖:

我們可以看到報(bào)錯(cuò)中的缺失模塊 ‘sklearn.utils._cython_blas' 的模塊文件在這里其實(shí)被命名成了 _cython_blas.cp37-win_amd64.pyd,就是它了。

復(fù)制進(jìn)來(lái)后,我們?cè)匐p擊生成的文件夾下的可執(zhí)行文件 ./project/dist/project/project.exe,捕捉一下新的錯(cuò)誤,一直這樣捕捉錯(cuò)誤,然后復(fù)制粘貼操作修復(fù)錯(cuò)誤,如果沒(méi)錯(cuò)誤就成功了。除非你還有其它類型的錯(cuò)誤。

我們又看到了新的報(bào)錯(cuò):

同樣的方法,解決這個(gè)同樣類型的錯(cuò)誤,思路「打開(kāi)開(kāi)發(fā)環(huán)境對(duì)應(yīng)的目錄找到生成項(xiàng)目目錄中缺失的 pyd 文件復(fù)制進(jìn)生成項(xiàng)目目錄中對(duì)應(yīng)的位置」。

可能有人一遍有點(diǎn)懵,那我就不省略了,再重復(fù)下修復(fù)這個(gè)錯(cuò)誤的示意圖:

接下來(lái)的 debug 就不詳細(xì)展示了,步驟思路一摸一樣,直到讓可執(zhí)行文件不再缺失模塊為止,就成功了,最后運(yùn)行下生成的可執(zhí)行文件 ./dist/project/project.exe

這就成功了。

到此這篇關(guān)于詳解pyinstaller生成exe的閃退問(wèn)題解決方案的文章就介紹到這了,更多相關(guān)pyinstaller生成exe內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論