将python程式打包成exe可執行檔案有多種方法,這裡講一種最簡單最常用的方法,隻需要使用pyinstaller指令即可。
一、環境
Windows 7或10 x64
Python 3.6.1
二、需要包
pyinstaller 3.3
pywin32
這裡需要注意!!!
在網上找很多使用pyinstaller庫将python程式打包成exe的方法都是需要python3.3版本以前的。而python3.6想要打包pyinstaller庫不支援,但是經過很多輪嘗試之後發現pyinstaller 3.3這個版本的包可以成功将python3.6版本的程式打包成exe。
還有一點需要注意,打包成exe都需要pywin32這個包,但是這個包很頑固,python2可以很好安裝,但是python3安裝時出現很多問題,需要下載下傳本地安裝。但是pywin32本地安裝不像其它庫直接運作python setup.py install就行,pywin32這個包需要下載下傳一個exe檔案的安裝包然後點選運作才行。pywin32包連接配接:https://sourceforge.net/projects/pywin32/files/pywin32/Build%20220/ 下載下傳時需注意自己python是32位的還是64位的,比如我的是python3.6 32位,我就下載下傳這個:
三、pywin32的安裝
下載下傳pywin32後,點選運作,會發現出現下面的界面:
同樣需要注意!!!!
很多同學到這個界面時,會報錯,提示檢測不到系統安裝了python3.6!!!,而且不能手動添加路徑。這個原因是你的python3.6不在系統的系統資料庫中,是以需要寫一個腳本把python加入到系統系統資料庫,腳本檔案sys.py在這:
(位址:https://download.csdn.net/download/qq_35203425/10123871)。
簡單運作該sys.py程式後,就能添加python3.6到系統系統資料庫了。下一步就是安裝pywin32這個包了,還是像上面,運作該exe包,這時候就能出現上面那個能檢測到python目錄的界面,一直點選下一步,完成。
四、pyinstaller 3.3安裝
直接用pip安裝的pyinstaller是3.2.1版本(我這是17年11月份的情況,後來可能自動安裝更高版本),但是pyinstaller 3.2.1不能打包成exe,會出現很多溢出錯誤。是以需要更新包,網上很多人說去github上下載下傳最新版的pyinstaller,位址:https://github.com/pyinstaller/pyinstaller,下載下傳後解壓安裝運作該包,然後将其中的PyInstaller 檔案夾 複制到你安裝pyinstaller的相應目錄Python36\Lib\site-packages,進行替換。
但是!!!!我按照上述說法還是不行,最後我發現我的pycharm裡說明了pyinstaller有新版本3.3,這時候我就,選中pyinstaller包,然後點選右邊的向上箭頭,就能更新為3.3版本了,下面就是我的包:
五、打包自己的py成exe
真是萬事俱備隻欠東風,都到這一步了,希望不會再出現錯誤。果然,一切順利,成功打包python3.6項目成exe!!!下面是具體步驟:
首先建立一個python項目,然後到你的項目檔案夾下,打開cmd,注意要是在該檔案路徑下,然後運作pyinstaller xxx.py即可。
1.建立xxx.py程式
2.cmd運作指令
打開cmd,運作pyinstaller xxx.py指令(我的檔案名為threeD.py,我是用git bash運作的該指令,cmd也一樣),發現不再報錯,運作成功!!!
3.結果
會發現該檔案夾下多了很多檔案,點選dist,進去能發現一個exe檔案,點選運作即可(我的程式是一個畫圖)
大功告成!!!!
4.優化
因為這個打包會出現很多需要依賴的檔案,那如果我隻想要一個exe怎麼辦呢?那麼這時候就需要加一個-F參數就行:pyinstaller -F xxx.py就行了。
更多參數:
-F, –onefile | 打包一個單個檔案,如果你的代碼都寫在一個.py檔案的話,可以用這個,如果是多個.py檔案就别用 |
-D, –onedir | 打包多個檔案,在dist中生成很多依賴檔案,适合以架構形式編寫工具代碼,我個人比較推薦這樣,代碼易于維護 |
-K, –tk | 在部署時包含 TCL/TK |
-a, –ascii | 不包含編碼.在支援Unicode的python版本上預設包含所有的編碼. |
-d, –debug | 産生debug版本的可執行檔案 |
-w,–windowed,–noconsole | 使用Windows子系統執行.當程式啟動的時候不會打開指令行(隻對Windows有效) |
-c,–nowindowed,–console | 使用控制台子系統執行(預設)(隻對Windows有效) pyinstaller -c xxxx.py pyinstaller xxxx.py --console |
-s,–strip | 可執行檔案和共享庫将run through strip.注意Cygwin的strip往往使普通的win32 Dll無法使用. |
-X, –upx | 如果有UPX安裝(執行Configure.py時檢測),會壓縮執行檔案(Windows系統中的DLL也會)(參見note) |
-o DIR, –out=DIR | 指定spec檔案的生成目錄,如果沒有指定,而且目前目錄是PyInstaller的根目錄,會自動建立一個用于輸出(spec和生成的可執行檔案)的目錄.如果沒有指定,而目前目錄不是PyInstaller的根目錄,則會輸出到目前的目錄下. |
-p DIR, –path=DIR | 設定導入路徑(和使用PYTHONPATH效果相似).可以用路徑分割符(Windows使用分号,Linux使用冒号)分割,指定多個目錄.也可以使用多個-p參數來設定多個導入路徑,讓pyinstaller自己去找程式需要的資源 |
–icon=<FILE.ICO> | 将file.ico添加為可執行檔案的資源(隻對Windows系統有效),改變程式的圖示 pyinstaller -i ico路徑 xxxxx.py |
–icon=<FILE.EXE,N> | 将file.exe的第n個圖示添加為可執行檔案的資源(隻對Windows系統有效) |
-v FILE, –version=FILE | 将verfile作為可執行檔案的版本資源(隻對Windows系統有效) |
-n NAME, –name=NAME | 可選的項目(産生的spec的)名字.如果省略,第一個腳本的主檔案名将作為spec的名字 |
然後看自己檔案夾dist下的exe檔案:
發現原來那些依賴配置什麼都打包到exe中了,是以這個exe比上一個圖中的exe要大,但運作結果都是一樣的。關于pyinstaller還有很多有趣的東西,比如設定好看的ico圖示等,期待你的發現。
補充:如果是安裝了anaconda,那麼Pyinstaller就很好安裝,因為anaconda裡面包含很多日常需要的包