py文件打包成exe文件的方式一共有三種:py2exe、PyInstaller和cx_Freezehtml
本文分四個步驟來詳講如何用PyInstaller將py文件打包成exe文件python
1. PyInstaller 簡介 2. PyInstaller 安裝 3. 將py文件打包成exe文件 4. PyInstaller打包常見問題
python做爲一門解釋型腳本語言,它有三種發佈方式: .py文件 : 源碼文件,運行須要使用者安裝Python環境而且安裝依賴的各類庫 .pyc文件:pyc文件是Python解釋器能夠識別的二進制碼,可跨平臺的,須要使用者安裝相應版本的Python和依賴庫。 可執行文件:不須要安裝python環境和依賴庫,可針對不一樣平臺須要打包不一樣的可執行文件(Windows,Linux,Mac,...)
1. PyInstaller工具能夠把python解析器和腳本打包成一個可執行的文件,並非編譯成真正的機器碼,打包成一個可執行文件後運行效率可能會下降,好處就是在使用者的機器上能夠不用安裝python和你的腳本依賴的庫。 2. 利用PyInstaller對指定的的腳本打包時,會先分析腳本所依賴的其餘腳本,而後根據導包路徑去查找,把全部相關的腳本收集起來,包括Python解析器,而後根據你的命令參數可分別生成文件夾,或者打包成一個可執行文件。 3. 不管是生成的文件夾裏的可執行文件或者只打包成一個可執行文件均可以直接運行,前者須要把整個文件夾都給別人。
注意⚠️:PyInstaller打包的執行文件,只能在和打包機器系統一樣的環境下。也就是說,不具有可移植性,若須要在不一樣系統上運行,就必須針對該平臺進行打包。linux
這裏建議安裝python環境管理工具conda,作到不一樣的環境隔離 https://www.cnblogs.com/trotl/p/11863544.htmlwindows
使用命令pip install PyInstaller便可 在windows下,pyinstaller須要PyWin32的支持。當用pip安裝PyInstaller時未找到PyWin32,會自動安裝pypiwin32
pip install PyInstaller
通用參數 工具
與生成結果有關參數 測試
Windows和Mac特有的參數 ui
PyInstaller -F -w -i xxx.ico dev.py --hidden-import=pandas._libs.tslibs.timedeltas
經常使用參數: -F 指只生成一個exe文件,不生成其餘dll文件 -w 不彈出交互窗口,若是你想程序運行的時候,與程序進行交互,則不加該參數 -i 設定程序圖標 ,其後面的xxx.ico文件就是程序小圖標 dev.py 要打包的程序,若是你不是在dev.py同一級目錄下執行的打包命令,這裏得寫上dev.py的路徑地址 –hidden-import=pandas._libs.tslibs.timedeltas 隱藏相關模塊的引用編碼
注意⚠️:你在哪一個目錄下執行的命令,默認打包完成的文件或者文件夾就在該目錄spa
1. 路徑最好爲英文,沒有中文字符; 2. 腳本名稱裏沒有特殊字符 3. 使用utf-8編碼 4. 圖標文件必須是正常格式,爲.ico文件 5. 命令使用pyinstaller和pyinstaller.exe結果都是同樣的 6. 參數的添加得在pyinstaller和dev.py文件中間,不能隨意位置添加 7. 若是你打包的代碼中用到了靜態文件,如圖片和資源文件,需手動複製到文件夾中,不然exe文件會報找不到文件的錯 8. 代碼裏導包最好使用from的方式,可節省打包後的文件大小 9. 就是當你使用錯誤的參數去打包或者打包到一半中斷,等等此類運行到一半沒了的狀況。會致使你原來的py文件變成一個0KB的空文件。裏面的代碼會所有消失!!!因此之後須要有個良好的習慣,就是複製一份代碼出來,用這個副本進行打包。而且參數出錯,或者打錯了致使失敗時,檢查下副本文件的py文件是否還存在再繼續從新打包,否則打出來的就是空的文件,天然一直閃退,由於壓根沒內容(這點我沒遇到過,來自別人的提醒) 10. pygame代碼調試的時候要在結束時加quit()否則程序會崩潰 11. py文件運行沒問題,不表明你打包後的文件運行就沒問題,因此在打包好文件,打算運行exe文件測試時必定要錄屏,由於報錯會一閃而逝而後程序關閉,不仔細看的話,發現不了還報錯,只會認爲程序一運行就閃退,會讓人不明因此,都不知道爲何,只有清楚報的什麼錯纔好去解決,因此,必定要錄屏!!!! 12. 若是在py文件中用到了多進程,且你在Windows下編譯須要加一行代碼在開頭,multiprocessing.freeze_support() 13. 打包的時候要進入到能運行這個py文件的虛擬環境中,不能在別的環境中對py文件打包,否則打包的結果仍是你原來的環境,可能打包文件過大,或者引發缺失包等其餘問題 14. 若是有打包錯誤,具體看build裏的warn***.txt文檔,裏面詳細記載了錯誤的緣由。通常都是庫丟失
1. 「IndexError: tuple index out of range」調試
錯誤分析:這個問題是當前的pyinstaller版本不支持python的版本 解決辦法:修改pyinstaller的版本,pip install pyinstaller==適合你的版本
**2. ImportError: C extension: No module named‘pandas._libs.tslibs.timedeltas’ **
錯誤分析:由於個人代碼中引用了pandas庫,而後使用pyinstaller打包的時候顯示模塊缺失 解決辦法: 1. 忽略此模塊(打包時加上–hidden-import=pandas._libs.tslibs.timedeltas) 2. 添加文件 在你的python3的安裝路徑下找到PyInstaller/hooks的位置 如C:\Python36\Lib\site-packages\PyInstaller\hooks 新建文件hook-pandas.py,並填寫如下內容: hiddenimports=[ #all your previous hidden imports 'pandas', 'pandas._libs.tslibs.timedeltas' ]