<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          如何將Python版「羊了個羊」打包成exe文件

          共 3172字,需瀏覽 7分鐘

           ·

          2023-11-10 16:59

          入門教程、案例源碼、學習資料、讀者群

          請訪問: python666.cn


          大家好,歡迎來到 Crossin的編程教室 !


          之前寫過一個 Python 版的「羊了個羊」游戲:

          羊了個羊,但是Python簡(li)單(pu)版

          后來有同學問,能不能打包成 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的編程教室



          Crossin的第2本書碼上行動:利用Python與ChatGPT高效搞定Excel數(shù)據(jù)分析已經上市了

          點此查看上一本《碼上行動:零基礎學會Python編程》介紹

          本書從 Python 和 Excel 結合使用的角度講解處理分析數(shù)據(jù)的思路、方法與實戰(zhàn)應用。不論是希望從事數(shù)據(jù)分析崗位的學習者,還是其他職業(yè)的辦公人員,都可以通過本書的學習掌握 Python 分析數(shù)據(jù)的技能。書中創(chuàng)新性地將 ChatGPT 引入到教學當中,用 ChatGPT 答疑并提供實訓代碼,并介紹了使用 ChatGPT 輔助學習的一些實用技巧,給學習者帶來全新的學習方式。


          讀者朋友們購買后可在后臺聯(lián)系我,加入讀者交流群,Crossin會為你開啟陪讀模式,解答你在閱讀本書時的一切疑問。

          感謝轉發(fā)點贊的各位~


          _往期文章推薦_

          一段奇葩的1024代碼
          Python復刻游戲《貪吃蛇大作戰(zhàn)》



          【教程】: python

          【答疑】: 666
          更多資源點擊閱讀原文

          瀏覽 1428
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国内一级免费黄色视频在线网展览器的封 | 男人天堂网av | 国产极品久久7777777 | 轻轻操影院 | 色国产avav |