前陣子受人之託寫了一隻小程式,需要在Windows 上執行,所幸用了覺得在資料處理方面比較方便的Python 來當作開發工具,但如果再不打包的狀況下,但後來想想,要請受託人自行在Windows 上架設Python 環境並且下指令,未免也太不友善了吧XD。
因爲長期使用macOS,以下將紀錄我在Windows 環境下使用Py2exe 踩到的雷:
Precondition:
- 乾淨的Windows 電腦一台 (*註1)
- Windows 7 32bit 環境 (*註2)
Step 1:
到Python 官方網站下載Python 3.4,並安裝。
Note:安裝方法很簡單,不用刻意改路徑,將會裝在 C:\python34
Step 2:
新增環境變數,用以讓你打開cmd 時可以直接使用python 指令,若不設置此選項也可以考慮直接使用絕對路徑。
Note:設置方法參考如下
- 控制台 => 系統及安全性 =>系統 =>進階系統設定 =>環境變數
- 編輯系統變數Path
- 到變數值的最後加上C:\python34 (如果你沒有更改安裝路徑)
重要:每個環境變數請以「;」隔開!
Step 3:
透過Pip 安裝Py2exe 套件:打開cmd,執行:
$ cd C:\python34\Script $ pip install py2exe
以上前提為安裝路徑不變的狀況下。
Step 4:
切換到source code 的路徑:
$ cd YOUR_SOURCE_PATH
並新增setup.py 提供py2exe 的設定:
from distutils.core import setup import py2exe setup( options = {'py2exe': {'bundle_files': 2, 'compressed': True}}, windows = [{'script': 'gui.py'}])
因為我打包的是Tk GUI 程式,所以使用「windows」 這個選項來打包,這樣在Windows 環境下就不會跑出「黑色框框」在跳出GUI,而會直接顯示GUI,若想要單除使用Command line 執行,可以把「windows」選項改成「console」。
其中,script 後面的value 是指你要打包的Python 檔案,而範例gui.py是我的GUI 檔案的原始檔。
Step 5:
下指令來打包應用程式:
$ python setup.py py2exe
這個步驟必須延續上一步驟,如果路徑不在你的source code 與setup.py 路徑的話,此步驟經不會有預期效果。
Step 6:
若打包順利的話,會產生一個dist 檔案,裡面將會有一個檔案名稱與你剛剛script 後面的value 同名的.exe 檔可以執行,可以直接執行看看,如此一來將順利完成。
備註:
若程式碼當中有相依套件,請使用pip install 把他們裝一裝(其實我是懶得研究Windows 上的venv 加上我開發的venv python 版本是3.5 Orz),否則打包會失敗。
經過實測,python 3.4 也可以使用py2exe,3.5我就沒試了。
小結:
以上內容是我一邊try and error 後所留下的記憶,若步驟上有任何問題歡迎留言討論。
*註1 :其實最一開始我是挑選Pyinstaller,因為我的開發環境是Python 3.5版本,網路上「流傳」Py2exe 是沒有辦法使用的,所以我花了很多時間在嘗試,後來實在被Windows 環境惹毛索性把所有的Python 環境全砍了。
*註2:我的環境其實是bootchamp 的Windows 7 64bit,但接下來我裝的所有版本都是32 bit 避免相容性問題