1. 程式人生 > >python3.6打包成exe可執行檔案,已解決方案

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包連線:

https://sourceforge.net/projects/pywin32/files/pywin32/Build%20220/ 下載時需注意自己python是32位的還是64位的,比如我的是python3.6 32位,我就下載這個:

三、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裡面包含很多日常需要的包