<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
有時我們需要將python源程式使用pyinstaller打包成可執行exe釋出,而除了我們常用的新增exe圖示功能外,很多時候還希望能把各種圖片、聲音、字型等資源打包到exe中。尤其是在使用“-F”指令時,很多時候並不想看到如下圖的情況(程式打包到一個exe檔案了,但資原始檔仍然是孤零零的一大堆),這樣很不利於釋出~~
那我們應該怎麼辦呢?網上很多教學都講的不夠詳細,這裡就不一一列舉了。我們採用最強大的方法,直接修改pyinstaller生成的spec檔案(在這裡因為原始碼是“main.py”,所以生成的spec預設檔名為“main.spec”)。
首先,先確認自己是否安裝pyinstaller(什麼?我還沒有安裝?不好意思,請先查閱其他教學進行安裝,完成後再來看本文章)
其次,確認一下自己源程式內import的所有三方庫是否均已安裝。這裡可能會出現執行時正常,打包好後報錯提示“XXX庫找不到”的情況。這是因為電腦上裝有多個Python,在執行時呼叫的是環境A,而在打包時預設的pyinstaller卻是在環境B下的。(什麼?不會解決此問題?請先移步至別的文章學習)
這兩步完成後,我們開始正式的打包。首先在python原始檔的資料夾內上方位址列中輸入“cmd”後回車,cmd則會自動跳轉到當前路徑,如下圖所示
輸入如下命令後回車
pyi-makespec -F -w -i favicon.ico main.py
其中“pyi-makespec”會生成一個spec檔案(用於指定打包的設定),“-F”效果是打包成一個檔案,“-w”則可以使打包後的程式執行時不彈出黑視窗(在打包使用圖形介面庫的程式碼,如tkinter、pyqt5、pygame時很有用)。“-i”後跟一個ico格式(其他格式會報錯)的圖示,則可以指定打包後程式的圖示。“main.py”是你要打包程式的入口檔案(其他被呼叫的檔案會自動匯入)
執行後如下圖所示
可以看到多出了一個“main.spec”檔案(本質上是txt文字檔案,可用記事本開啟,是實現預設/個性化打包的檔案)
我們用記事本開啟,可以看到如下內容
可以看到剛剛執行的一些附加條件,如不顯示console,設定圖示為favcon.ico等。而我們在此問題中需要關注的是“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) # 修改當前工作目錄,使得資原始檔可以被正確存取 cd = source_path('') os.chdir(cd)
這段程式碼的功能是,當程式未打包時,不改變當前工作目錄;當程式被pyinstaller打包成exe時,則會將工作目錄修改為一個臨時資料夾"C:Users23121AppDataLocalTemp_MEI172602",屆時打包好的程式會將資原始檔都放到此處。
接下來我們解析“datas=[]”,此列表內可以加入一個元組(注意,此元組最多可以有兩個元素)指定要打包的資源和打包後在臨時資料夾內的資料夾名稱。比如“datas=[(‘res’,‘.’)]”第一個res代表需要打包的資料夾名res,其內部存放的全都是各種資原始檔。第二個’.‘代表打包後在臨時檔案中的資料夾名稱。因為我的程式資源原本是存放在main.py的同級目錄的,所有這裡不需要執行後將資源釋放到指定的資料夾中,直接使用’.'即可。如本身被呼叫的資源就在一個二級資料夾“resoure”裡,則修改為“datas=[(‘res’,‘resource’)]”。
下圖為修改後的main.spec
然後建立一個名為“res”的資料夾,將需要打包的資源全部放進去(注意:不需要把程式圖示也放進去,“favicon.ico”必須放到“main.py”同級目錄,否則在打包時會提示找不到圖示檔案)
接下來回到剛剛的cmd視窗中執行下面的命令
pyinstaller main.spec
可以看到已經成功打包了。
這時會多出一個dist資料夾,我們打包好的程式就在裡面。
現在程式已經能獨立執行了,我們執行程式後看一下資源被釋放到的路徑:
可以看到資源全部被臨時釋放到這裡了。關閉程式後再次嘗試進入此資料夾:
可以發現我們的臨時資料夾被清除了。
至此,這篇關於pyinstaller如何打包多個資原始檔的教學就結束了。
總結
到此這篇關於Pyinstaller打包多個資原始檔的文章就介紹到這了,更多相關Pyinstaller打包多個資原始檔內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45