如何將Python版「羊了個羊」打包成exe文件
入門教程、案例源碼、學習資料、讀者群
請訪問: python666.cn
大家好,歡迎來到 Crossin的編程教室 !
之前寫過一個 Python 版的「羊了個羊」游戲:
后來有同學問,能不能打包成 exe 文件發(fā)給其他電腦上沒有裝 Python 環(huán)境的人玩。

這個當然沒有問題!
今天就來介紹一下用 pyinstaller 打包成 exe 的流程。
省流版:
1. pip 安裝 pyinstaller 庫
2. pyi-makespec 命令生成 .spec 打包配置文件,并指定 --collect-all(包含所需模塊)、-F(單文件模式) -w(無命令行窗口)
pyi-makespec 目標代碼.py --collect-all pgzero -F -w
3. 修改 .spec 文件中的 datas 列表,加上圖片、音樂等外部資源文件所在目錄
datas = [('images', 'images'), ('music', 'music')]
4. pyinstaller 命令根據(jù)配置文件進行打包。
pyinstaller 目標文件.spec
1. 要打包的Python程序可以在命令行正常運行
因為打包操作需要在命令行執(zhí)行,如果游戲不能在命令行運行,說明命令行里配置的 Python 環(huán)境不正確,那即使能打包,生成的 exe 也無法運行。
2. 命令行里可以使用 pip 命令
這是為了能夠安裝打包用的 pyinstaller 模塊。

如果這兩點有問題,請檢查你的系統(tǒng)環(huán)境變量PATH里有沒有加上Python的安裝路徑。(系統(tǒng)屬性 - 環(huán)境變量 - 系統(tǒng)環(huán)境變量 - PATH,加上Python的安裝路徑及路徑下的Scripts目錄,并保證在最前面)

環(huán)境沒有問題,就可以通過 pip 安裝 pyinstaller:
pip install pyinstaller
如果下載太慢,在后面加上 -i 參數(shù)指定國內源,比如:
pip install pyinstaller -i https://pypi.tuna.tsinghua.edu.cn/simple/
安裝成功后,從命令行進入到代碼所在目錄,或者在文件夾中按住shift鍵,右鍵點擊空白處,選擇「在此處打開命令窗口」。

在命令行中用 pyinstaller 命令直接打包代碼文件:
pyinstaller 目標代碼.py
完成后會看到兩個文件夾,其中dist里就是打包好的程序。

一般簡單的代碼這樣就打包好了。但也經常會出問題,比如「羊了個羊」這樣打包后就無法正常運行,點擊 exe 文件后窗口一閃而過就關閉了。
要查看程序出錯的原因,可在 exe 文件所在目錄的命令行下,直接輸出文件名運行。這樣就會看到報錯輸出。

可以看到報錯是說找不到pgzero里的一個資源文件。
這是因為游戲用到的第三方模塊 pgzero 沒有全部被打包進去。
刪掉生成的兩個文件夾重新打包(或者在打包過程中提示時選擇覆蓋),加上 --collect-all 參數(shù),把 pgzero 模塊打包進去。
pyinstaller 目標代碼.py --collect-all pgzero
重新打包后依然不成功,但提示發(fā)生了變化,這說明前一個問題已經解決了,現(xiàn)在又有了新的問題。同樣在命令行運行查看報錯。

報錯說找不到圖片。
這是因為游戲用到的圖片、音樂等外部資源文件沒有被打包進去。
添加外部資源文件的方法是通過 .spec 文件打包。
用文本編輯器打開之前打包生成好的 .spec 文件。

或者用 pyi-makespec 替換之前的 pyinstaller 命令,作用是不執(zhí)行打包只生成 spec 文件。
pyi-makespec 目標代碼.py --collect-all pgzero
找到里面的 datas 列表,以二元組的形式,把資源目錄的實際路徑和程序中的調用路徑添加到列表里,注意書寫格式。

把 pyinstaller 的打包對象換成 spec 文件,再次打包。
pyinstaller 目標文件.spec
成功運行!

不過還有2個小問題:
1. 打包生成的結果除了 exe 文件,還有一個 _internal 目錄,里面有一堆文件,exe 必須帶上這些文件才能運行。

2. 程序執(zhí)行的時候,背后還跟著一個命令行窗口,看著很討厭。

因此,可以在 pyi-makespec 命令生成 spec 文件時:
加上 -F 參數(shù),設定將程序打包為單個文件;
加上 -w 參數(shù),設定不顯示命令行窗口。
pyi-makespec 目標代碼.py --collect-all pgzero -F -w
這樣就能以不帶命令行窗口的單 exe 文件形式成功打包「羊了個羊」游戲了。
作者:Crossin的編程教室

本書從 Python 和 Excel 結合使用的角度講解處理分析數(shù)據(jù)的思路、方法與實戰(zhàn)應用。不論是希望從事數(shù)據(jù)分析崗位的學習者,還是其他職業(yè)的辦公人員,都可以通過本書的學習掌握 Python 分析數(shù)據(jù)的技能。書中創(chuàng)新性地將 ChatGPT 引入到教學當中,用 ChatGPT 答疑并提供實訓代碼,并介紹了使用 ChatGPT 輔助學習的一些實用技巧,給學習者帶來全新的學習方式。
讀者朋友們購買后可在后臺聯(lián)系我,加入讀者交流群,Crossin會為你開啟陪讀模式,解答你在閱讀本書時的一切疑問。
感謝轉發(fā)和點贊的各位~
_往期文章推薦_
【教程】: python
