Hello!我是努力賺錢買生髮水的灰小猿。
今天和大家記錄一下Python程序打包成exe應用程序的過程。
我們平常所寫的程序一般都是在編譯環境下運行的,然而這對於那些沒有開發環境或者對程序一無所知的小白就很不友好了,
所以在進行Python項目開發的後期,對於能夠最大化的滿足各類型用戶的需求,十分有必要的一項工程就是軟件打包成EXE。
注意:光理論是不夠的,在此送大家一套2020最新Python全棧實戰視頻教程,點擊此處 免費獲取一起進步哦!
進行Python軟件打包的意義就在於讓開發的軟件能夠脫離開發環境,即使對Python編程開發毫無經驗的小白,也可以在電腦上使用Python開發產品。
軟件打包也是進行大型Python軟件開發的後期必備的一步操作,最典型的效果就是可以脫離開發環境,實現軟件的可視化。
要將Python腳本文件打包成可以使用的Python軟件,可以藉助的工具有py2exe、bbFreeze、pyInstaller、cx_Freeze、py2app,但對於目前使用性能最好的工具還是pyinstaller。
下面是這些模塊的使用對照表,可以自行參考:
大灰狼也對最常用的pyInstaller、cx_Freeze進行了試驗和對比。
發現在打包效果上pyInstaller還是要優於cx_Freeze的,所以今天就以pyinstaller爲例記錄一下Python軟件打包的過程。
首先是pyinstaller模塊的安裝,通常情況下可以在Python運行環境下的Script中使用cmd命令安裝pyinstaller模塊。
但應注意pyinstaller模塊的依賴庫較多,所以在安裝時常會出現缺少模塊的錯誤提醒,這個時候就需要使用pip命令將缺少的模塊一一導入進入。
在安裝好pyinstaller模塊之後,就可以對Python文件進行打包了,其中導Python模塊的方法可以是將文件放在與pip相同的文件夾下,或者在使用命令時,將文件的絕對路徑放在打包命令中。
以下是在使用pyinstaller進行打包時必備的步驟和注意事項,仔細參考,謹防踩坑:
(1) pyinstaller適用於python3.5及以下版本
(2) 在python環境的Script下使用cmd命令進行打包,
(3) 對於不需要調用其他外部庫的py文件,
① 單獨使用命令pyinstaller 命令 文件.py
(4) 對於需要調用外部庫的py文件
① 使用pyi-makespec -F 文件.py生成spec文件
② 對spec文件中的參數進行修改
③ spec文件中主要包含4個class: Analysis, PYZ, EXE和COLLECT.
-
Analysis以py文件爲輸入,它會分析py文件的依賴模塊,並生成相應的信息
-
PYZ是一個.pyz的壓縮包,包含程序運行需要的所有依賴
-
EXE根據上面兩項生成
-
COLLECT生成其他部分的輸出文件夾,COLLECT也可以沒有
④ Spec文件配置
- py文件打包配置
針對多目錄多文件的python項目,打包時候需要將所有相關的py文件輸入到Analysis類裏。Analysis類中的pathex定義了打包的主目錄。
對於在此目錄下的py文件可以只寫文件名不寫路徑。如上的spec腳本,將所有項目中的py文件路徑以列表形式寫入Analysis,這裏爲了說明混合使用了絕對路徑和相對路徑。
- 資源文件打包配置
資源文件包括打包的python項目使用的相關文件,如圖標文件,文本文件等。對於此類資源文件的打包需要設置Analysis的datas。
如例子所示datas接收元組:datas=[(SETUP_DIR+‘lib\icon’,‘lib\icon’(SETUP_DIR+‘data’,‘data’)]。元組的組成爲(原項目中資源文件路徑,打包後路徑)。
例子中的(SETUP_DIR+‘lib\icon’,‘lib\icon’)表示從D:\install_test\FASTPLOT\lib\icon下的圖標文件打包後放入打包結果路徑下的lib\icon目錄。
- c)Hidden import配置
pyinstaller在進行打包時,會解析打包的python文件,自動尋找py源文件的依賴模塊。
但是pyinstaller解析模塊時可能會遺漏某些模塊(not visible to the analysis phase),造成打包後執行程序時出現類似No Module named xxx。
這時我們就需要在Analysis下hiddenimports中加入遺漏的模塊,如例子中所示。
8)遞歸深度設置
將spec文件配置好以後在cmd中使用pyinstaller -XXX XXXX.spec
(5)、在打包導入某些模塊時,常會出現"RecursionError: maximum recursion depth exceeded"的錯誤。
這可能是打包時出現了大量的遞歸超出了python預設的遞歸深度。因此需要在spec文件上添加遞歸深度的設置,設置一個足夠大的值來保證打包的進行,
(6)pyinstaller庫的參數
(7)Exe的圖標文件格式爲ico格式,可以直接在這個網站進行ico格式圖標的轉換https://www.easyicon.net/
(8)打包時的路徑要使用絕對路徑
(9)打包前要將所有需要使用的包導入python的開發環境下。
(10)pyinstaller打包後的路徑使用中文沒有問題,不過爲了減少打包時候出錯的可能,儘量將打包使用的資源文件和代碼文件路徑設置爲英文。
最後
在軟件打包完成以後會在Python環境的Script目錄下打包生成兩個文件目錄build和dist。
build爲臨時文件目錄完成打包後可以刪除;dist中存放打包的結果,可執行文件和其它程序運行的關聯文件都在這個目錄下。
注意:最後送大家一套2020最新企業Pyhon項目實戰視頻教程,點擊此處 免費獲取,希望大家一起進步哦!
關於Python軟件打包的必備要領就記錄這些,軟件打包對於軟件在無開發環境的電腦上運行是十分不錯的舉措,感興趣的小夥伴可以嘗試!
覺得不錯記得點贊關注喲!
同時你也可以關注我的微信公衆號“灰狼洞主”,回覆 “Python筆記”獲取Python從入門到精通筆記分享和常用函數方法速查手冊!
大灰狼期待與你一同進步!