Pyinstaller打包多個資源文件的超詳細(xì)教程(推薦!)
有時我們需要將python源程序使用pyinstaller打包成可執(zhí)行exe發(fā)布,而除了我們常用的添加exe圖標(biāo)功能外,很多時候還希望能把各種圖片、聲音、字體等資源打包到exe中。尤其是在使用“-F”指令時,很多時候并不想看到如下圖的情況(程序打包到一個exe文件了,但資源文件仍然是孤零零的一大堆),這樣很不利于發(fā)布~~
那我們應(yīng)該怎么辦呢?網(wǎng)上很多教程都講的不夠詳細(xì),這里就不一一列舉了。我們采用最強(qiáng)大的方法,直接修改pyinstaller生成的spec文件(在這里因為源代碼是“main.py”,所以生成的spec默認(rèn)文件名為“main.spec”)。
首先,先確認(rèn)自己是否安裝pyinstaller(什么?我還沒有安裝?不好意思,請先查閱其他教程進(jìn)行安裝,完成后再來看本文章)
其次,確認(rèn)一下自己源程序內(nèi)import的所有三方庫是否均已安裝。這里可能會出現(xiàn)運(yùn)行時正常,打包好后報錯提示“XXX庫找不到”的情況。這是因為電腦上裝有多個Python,在運(yùn)行時調(diào)用的是環(huán)境A,而在打包時默認(rèn)的pyinstaller卻是在環(huán)境B下的。(什么?不會解決此問題?請先移步至別的文章學(xué)習(xí))
這兩步完成后,我們開始正式的打包。首先在python源文件的文件夾內(nèi)上方地址欄中輸入“cmd”后回車,cmd則會自動跳轉(zhuǎn)到當(dāng)前路徑,如下圖所示
輸入如下命令后回車
pyi-makespec -F -w -i favicon.ico main.py
其中“pyi-makespec”會生成一個spec文件(用于指定打包的配置),“-F”效果是打包成一個文件,“-w”則可以使打包后的程序運(yùn)行時不彈出黑窗口(在打包使用圖形界面庫的代碼,如tkinter、pyqt5、pygame時很有用)。“-i”后跟一個ico格式(其他格式會報錯)的圖標(biāo),則可以指定打包后程序的圖標(biāo)。“main.py”是你要打包程序的入口文件(其他被調(diào)用的文件會自動導(dǎo)入)
執(zhí)行后如下圖所示
可以看到多出了一個“main.spec”文件(本質(zhì)上是txt文本文件,可用記事本打開,是實現(xiàn)默認(rèn)/個性化打包的文件)
我們用記事本打開,可以看到如下內(nèi)容
可以看到剛剛執(zhí)行的一些附加條件,如不顯示console,設(shè)置圖標(biāo)為favcon.ico等。而我們在此問題中需要關(guān)注的是“datas=[]”,這里可以指定打包的資源文件。
接下來在python主文件最前面加入下面的代碼
import os import sys # 資源文件目錄訪問 def source_path(relative_path): # 是否Bundle Resource if getattr(sys, 'frozen', False): base_path = sys._MEIPASS else: base_path = os.path.abspath(".") return os.path.join(base_path, relative_path) # 修改當(dāng)前工作目錄,使得資源文件可以被正確訪問 cd = source_path('') os.chdir(cd)
這段代碼的功能是,當(dāng)程序未打包時,不改變當(dāng)前工作目錄;當(dāng)程序被pyinstaller打包成exe時,則會將工作目錄修改為一個臨時文件夾"C:\Users\23121\AppData\Local\Temp_MEI172602",屆時打包好的程序會將資源文件都放到此處。
接下來我們解析“datas=[]”,此列表內(nèi)可以加入一個元組(注意,此元組最多可以有兩個元素)指定要打包的資源和打包后在臨時文件夾內(nèi)的文件夾名稱。比如“datas=[(‘res’,‘.’)]”第一個res代表需要打包的文件夾名res,其內(nèi)部存放的全都是各種資源文件。第二個’.‘代表打包后在臨時文件中的文件夾名稱。因為我的程序資源原本是存放在main.py的同級目錄的,所有這里不需要運(yùn)行后將資源釋放到指定的文件夾中,直接使用’.'即可。如本身被調(diào)用的資源就在一個二級文件夾“resoure”里,則修改為“datas=[(‘res’,‘resource’)]”。
下圖為修改后的main.spec
然后創(chuàng)建一個名為“res”的文件夾,將需要打包的資源全部放進(jìn)去(注意:不需要把程序圖標(biāo)也放進(jìn)去,“favicon.ico”必須放到“main.py”同級目錄,否則在打包時會提示找不到圖標(biāo)文件)
接下來回到剛剛的cmd窗口中執(zhí)行下面的命令
pyinstaller main.spec
可以看到已經(jīng)成功打包了。
這時會多出一個dist文件夾,我們打包好的程序就在里面。
現(xiàn)在程序已經(jīng)能獨立運(yùn)行了,我們運(yùn)行程序后看一下資源被釋放到的路徑:
可以看到資源全部被臨時釋放到這里了。關(guān)閉程序后再次嘗試進(jìn)入此文件夾:
可以發(fā)現(xiàn)我們的臨時文件夾被清除了。
至此,這篇關(guān)于pyinstaller如何打包多個資源文件的教程就結(jié)束了。
總結(jié)
到此這篇關(guān)于Pyinstaller打包多個資源文件的文章就介紹到這了,更多相關(guān)Pyinstaller打包多個資源文件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python實現(xiàn)連續(xù)變量最優(yōu)分箱詳解--CART算法
今天小編就為大家分享一篇python實現(xiàn)連續(xù)變量最優(yōu)分箱詳解--CART算法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-11-11Pycharm中安裝Pygal并使用Pygal模擬擲骰子(推薦)
這篇文章主要介紹了Pycharm中安裝Pygal并使用Pygal模擬擲骰子,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-04-04python機(jī)器學(xué)習(xí)實現(xiàn)決策樹
這篇文章主要為大家詳細(xì)介紹了python機(jī)器學(xué)習(xí)實現(xiàn)決策樹,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-11-11Python 中多態(tài)性的示例和類的繼承多態(tài)性詳解
多態(tài)性通常在類的方法中使用,其中我們可以具有相同方法名稱的多個類,本文給大家介紹Python 中多態(tài)性的示例和類的繼承多態(tài)性詳解,需要的朋友可以參考下2023-10-10Python?jpg快速轉(zhuǎn)png并調(diào)整大小方式
這篇文章主要介紹了Python實現(xiàn)jpg快速轉(zhuǎn)png并調(diào)整大小方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-03-03python等差數(shù)列求和公式前 100 項的和實例
今天小編就為大家分享一篇python等差數(shù)列求和公式前 100 項的和實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-02-02