python之pyinstaller組件打包命令和異常解析實戰(zhàn)
項目場景:
Python版本:3.8
因公司業(yè)務需求,須開發(fā)一套局域網(wǎng)內視頻會議軟件,此次采用Python實現(xiàn)此功能。
程序編寫完并在編譯器實現(xiàn)此功能后,采用pyinstaller組件打包成應用程序
問題描述:
在使用pyinstaller組件打包過程中,著實遇到一些問題,以下列出此次遇到主要的問題:
1.如何打包多個文件?
2.打包完運行后控制臺顯示"找不到指定模塊。mkl_intel_thread.l.dll",圖示如下:
3.打包如何排除不需要的組件以減少包的大???
4.待補充 (≧◠◡◠≦)✌
原因分析:
本次打包組件均由conda install安裝,在編譯器中opencv引用模塊運行項目是沒問題的,只是打包運行就會報Intel MKL FATAL ERROR: Cannot load mkl_intel_thread.l.dll,缺少MKL文件 ,疑惑了一段時間…( @_@; )
解決方案:
首先呢,當然是找百度大神來解決問題啦 (๑•̀ㅂ•́)و✧,尋尋覓覓,無果,但至少讓我理解了一點打包的過程和注意事項,結合過去代碼經驗,這次把Anaconda的opencv、numpy和mkl模塊都給卸了,代碼如下:
conda uninstall opencv conda uninstall numpy conda uninstall mkl
然后改成如下:
pip install mkl pip install numpy pip install opencv
以上最好按順序安裝,三個組件有相互依賴關系,安裝完發(fā)現(xiàn)部署后不再報錯。
在安裝過程中也發(fā)現(xiàn)了兩個安裝方式安裝的組件其實不太相同,從包的大小得知,pip install安裝的包應該是比較完整的,所以pyinstaller打包起來不會導致文件丟失。
這里就解決了問題2啦(把最難的先給解決啦~ (  ̄ー ̄)人(^▽^ ))
接下來說明一下如何打包多文件。
首先要打包多文件,先生成一個spec文件,代碼如下:
pyi-makespec app.py
這行代碼會生成一個app.spec文件在當前目錄下。
生成的app.spec的內容如下:
# -*- mode: python ; coding: utf-8 -*- block_cipher = None #如果要添加打包文件,在這里添加 a = Analysis(['app.py'], #例:['app.py','app1.py','app2.py'] pathex=['C:\\yourAppDir'], #打包路徑,一般默認為當前文件夾路徑 binaries=[], # 打包靜態(tài)資源,這邊為元祖類型 datas=[], # 例:[('C\\yourAppDir\\images','images'),('C\\yourAppDir\\videos','videos')] hiddenimports=[], hookspath=[], runtime_hooks=[], excludes=[], win_no_prefer_redirects=False, win_private_assemblies=False, cipher=block_cipher, noarchive=False) pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher) exe = EXE(pyz, a.scripts, a.binaries, a.zipfiles, a.datas, [], #生成的執(zhí)行文件名 name='MyAwesomeApp', #生成 MyAwesomeApp.exe debug=False, bootloader_ignore_signals=False, strip=False, upx=True, upx_exclude=[], runtime_tmpdir=None, #運行時是否顯示控制臺,注意True和False的首字母都要大寫 console=True)
以下為打包常用命令:
常用: -i 給應用程序添加圖標 -F 指定打包后只生成一個exe格式的文件 -D –onedir 創(chuàng)建一個目錄,包含exe文件,但會依賴很多文件(默認選項) -c –console, –nowindowed 使用控制臺,無界面(默認) -w –windowed, –noconsole 使用窗口,無控制臺 -p 添加搜索路徑
這邊我用的是:
pyinstaller -F app.spec
過了一會兒打包完成后會在當前目錄生成三個文件夾,如下圖所示:
_pycache_文件夾緩存你打包的文件。(如果組件有重新安裝,打包時建議刪了再進行打包)
bulid文件夾保存一些關于打包文件的信息。
dist文件保存打包完生成的.exe文件。
以上,問題1結束啦,接下來最后一個問題3咯~ ( ̄▽ ̄)~■干杯□~( ̄▽ ̄)
記得第一次打包的時候,很納悶,為啥寫一點代碼打包起來要100多MB? ㄟ( ▔, ▔ )ㄏ
首先依然百度一下,你就…還是不知道 (ˉ▽ ̄~) 切~~
還是靠自己啦,最后打開編譯器看一下環(huán)境,陡然發(fā)現(xiàn)環(huán)境多了很多不需要的組件。
如果怕麻煩一個一個conda uninstall的話,建議新建一個干凈的python3環(huán)境,再安裝自己需要的組件。
(當前Python環(huán)境建議新建一個在項目當前目錄下,為當前項目專用環(huán)境,初始化只有兩個基本組件,再安裝requirement.txt文件中的組件就可以了)
這樣打包起來你就會發(fā)現(xiàn)包小了很多。
終于寫完啦 o(*≧▽≦)ツ┏━┓ 開熏
錦瑟無端五十弦,一弦一柱思華年
到此這篇關于python之pyinstaller組件打包命令和異常解析實戰(zhàn)的文章就介紹到這了,更多相關python pyinstaller內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
python驗證碼識別教程之灰度處理、二值化、降噪與tesserocr識別
這篇文章主要給大家介紹了關于python驗證碼識別教程之灰度處理、二值化、降噪與tesserocr識別的相關資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考借鑒,下面隨著小編來一起學習學習吧2018-06-06python中數(shù)組nums[:]和nums的區(qū)別
本文主要介紹了python中數(shù)組nums[:]和nums的區(qū)別,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-07-07python運用sklearn實現(xiàn)KNN分類算法
這篇文章主要為大家詳細介紹了python運用sklearn實現(xiàn)KNN分類算法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-10-10Django2.1.7 查詢數(shù)據(jù)返回json格式的實現(xiàn)
這篇文章主要介紹了Django2.1.7 查詢數(shù)據(jù)返回json格式的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-12-12Python實現(xiàn)動態(tài)圖解析、合成與倒放
這篇文章主要為大家詳細介紹了Python實現(xiàn)動態(tài)圖的解析、合成與倒放,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-01-01