python3.6打包成exe可執行檔案,已解決方案
將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包連線:
三、pywin32的安裝
下載pywin32後,點選執行,會發現出現下面的介面:
同樣需要注意!!!!
很多同學到這個介面時,會報錯,提示檢測不到系統安裝了python3.6!!!,而且不能手動新增路徑。這個原因是你的python3.6不在系統的登錄檔中,所以需要寫一個指令碼把python加入到系統登錄檔,指令碼檔案在這sys.py。簡單執行該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裡面包含很多日常需要的包