python之pyinstaller組件打包命令和異常解析實(shí)戰(zhàn)
項(xiàng)目場(chǎng)景:
Python版本:3.8
因公司業(yè)務(wù)需求,須開發(fā)一套局域網(wǎng)內(nèi)視頻會(huì)議軟件,此次采用Python實(shí)現(xiàn)此功能。
程序編寫完并在編譯器實(shí)現(xiàn)此功能后,采用pyinstaller組件打包成應(yīng)用程序
問題描述:
在使用pyinstaller組件打包過程中,著實(shí)遇到一些問題,以下列出此次遇到主要的問題:
1.如何打包多個(gè)文件?
2.打包完運(yùn)行后控制臺(tái)顯示"找不到指定模塊。mkl_intel_thread.l.dll",圖示如下:

3.打包如何排除不需要的組件以減少包的大???
4.待補(bǔ)充 (≧◠◡◠≦)✌
原因分析:
本次打包組件均由conda install安裝,在編譯器中opencv引用模塊運(yùn)行項(xiàng)目是沒問題的,只是打包運(yùn)行就會(huì)報(bào)Intel MKL FATAL ERROR: Cannot load mkl_intel_thread.l.dll,缺少M(fèi)KL文件 ,疑惑了一段時(shí)間…( @_@; )
解決方案:
首先呢,當(dāng)然是找百度大神來解決問題啦 (๑•̀ㅂ•́)و✧,尋尋覓覓,無果,但至少讓我理解了一點(diǎn)打包的過程和注意事項(xiàng),結(jié)合過去代碼經(jīng)驗(yàn),這次把Anaconda的opencv、numpy和mkl模塊都給卸了,代碼如下:
conda uninstall opencv conda uninstall numpy conda uninstall mkl
然后改成如下:
pip install mkl pip install numpy pip install opencv
以上最好按順序安裝,三個(gè)組件有相互依賴關(guān)系,安裝完發(fā)現(xiàn)部署后不再報(bào)錯(cuò)。
在安裝過程中也發(fā)現(xiàn)了兩個(gè)安裝方式安裝的組件其實(shí)不太相同,從包的大小得知,pip install安裝的包應(yīng)該是比較完整的,所以pyinstaller打包起來不會(huì)導(dǎo)致文件丟失。
這里就解決了問題2啦(把最難的先給解決啦~ (  ̄ー ̄)人(^▽^ ))
接下來說明一下如何打包多文件。
首先要打包多文件,先生成一個(gè)spec文件,代碼如下:
pyi-makespec app.py
這行代碼會(huì)生成一個(gè)app.spec文件在當(dāng)前目錄下。
生成的app.spec的內(nèi)容如下:
# -*- mode: python ; coding: utf-8 -*-
block_cipher = None
#如果要添加打包文件,在這里添加
a = Analysis(['app.py'], #例:['app.py','app1.py','app2.py']
pathex=['C:\\yourAppDir'], #打包路徑,一般默認(rèn)為當(dāng)前文件夾路徑
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,
#運(yùn)行時(shí)是否顯示控制臺(tái),注意True和False的首字母都要大寫
console=True)
以下為打包常用命令:
常用: -i 給應(yīng)用程序添加圖標(biāo) -F 指定打包后只生成一個(gè)exe格式的文件 -D –onedir 創(chuàng)建一個(gè)目錄,包含exe文件,但會(huì)依賴很多文件(默認(rèn)選項(xiàng)) -c –console, –nowindowed 使用控制臺(tái),無界面(默認(rèn)) -w –windowed, –noconsole 使用窗口,無控制臺(tái) -p 添加搜索路徑
這邊我用的是:
pyinstaller -F app.spec
過了一會(huì)兒打包完成后會(huì)在當(dāng)前目錄生成三個(gè)文件夾,如下圖所示:

_pycache_文件夾緩存你打包的文件。(如果組件有重新安裝,打包時(shí)建議刪了再進(jìn)行打包)
bulid文件夾保存一些關(guān)于打包文件的信息。
dist文件保存打包完生成的.exe文件。
以上,問題1結(jié)束啦,接下來最后一個(gè)問題3咯~ ( ̄▽ ̄)~■干杯□~( ̄▽ ̄)
記得第一次打包的時(shí)候,很納悶,為啥寫一點(diǎn)代碼打包起來要100多MB? ㄟ( ▔, ▔ )ㄏ
首先依然百度一下,你就…還是不知道 (ˉ▽ ̄~) 切~~
還是靠自己啦,最后打開編譯器看一下環(huán)境,陡然發(fā)現(xiàn)環(huán)境多了很多不需要的組件。
如果怕麻煩一個(gè)一個(gè)conda uninstall的話,建議新建一個(gè)干凈的python3環(huán)境,再安裝自己需要的組件。
(當(dāng)前Python環(huán)境建議新建一個(gè)在項(xiàng)目當(dāng)前目錄下,為當(dāng)前項(xiàng)目專用環(huán)境,初始化只有兩個(gè)基本組件,再安裝requirement.txt文件中的組件就可以了)
這樣打包起來你就會(huì)發(fā)現(xiàn)包小了很多。
終于寫完啦 o(*≧▽≦)ツ┏━┓ 開熏
錦瑟無端五十弦,一弦一柱思華年

到此這篇關(guān)于python之pyinstaller組件打包命令和異常解析實(shí)戰(zhàn)的文章就介紹到這了,更多相關(guān)python pyinstaller內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
正則給header的冒號(hào)兩邊參數(shù)添加單引號(hào)(Python請(qǐng)求用)
這篇文章主要介紹了正則給header的冒號(hào)兩邊參數(shù)添加單引號(hào)(Python請(qǐng)求用)的相關(guān)知識(shí),非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-08-08
使用Mixin設(shè)計(jì)模式進(jìn)行Python編程的方法講解
Mixin模式也可以看作是一種組合模式,綜合多個(gè)類的功能來產(chǎn)生一個(gè)類而不通過繼承來實(shí)現(xiàn),下面就來整理一下使用Mixin設(shè)計(jì)模式進(jìn)行Python編程的方法講解:2016-06-06
Python二進(jìn)制文件轉(zhuǎn)換為文本文件的代碼實(shí)現(xiàn)
在日常編程中,我們經(jīng)常會(huì)遇到需要將二進(jìn)制文件轉(zhuǎn)換為文本文件的情況,在Python中,我們可以利用各種庫(kù)和技術(shù)來完成這項(xiàng)任務(wù),本文將介紹如何使用Python將二進(jìn)制文件轉(zhuǎn)換為文本文件,并提供實(shí)用的代碼示例,需要的朋友可以參考下2024-04-04
selenium學(xué)習(xí)教程之定位以及切換frame(iframe)
這篇文章主要給大家介紹了關(guān)于selenium學(xué)習(xí)教程之定位以及切換frame(iframe)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01
Python練習(xí)之制作企業(yè)獎(jiǎng)金計(jì)算器
在本篇博客中,我們將使用Python代碼解決一個(gè)企業(yè)獎(jiǎng)金計(jì)算的問題,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-06-06
python 按鈕點(diǎn)擊關(guān)閉窗口的實(shí)現(xiàn)
這篇文章主要介紹了python 按鈕點(diǎn)擊關(guān)閉窗口的實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-03-03
Tensorflow 定義變量,函數(shù),數(shù)值計(jì)算等名字的更新方式
今天小編就為大家分享一篇Tensorflow 定義變量,函數(shù),數(shù)值計(jì)算等名字的更新方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-02-02
Python+OpenCV編寫車輛計(jì)數(shù)器系統(tǒng)
本文,我們將使用歐幾里德距離跟蹤和輪廓的概念在 Python 中使用 OpenCV 構(gòu)建車輛計(jì)數(shù)器系統(tǒng),文中的示例代碼講解詳細(xì),感興趣的可以了解一下2022-05-05
python matplotlib繪圖,修改坐標(biāo)軸刻度為文字的實(shí)例
今天小編就為大家分享一篇python matplotlib繪圖,修改坐標(biāo)軸刻度為文字的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-05-05

