前陣子受人之託寫了一隻小程式,需要在Windows 上執行,所幸用了覺得在資料處理方面比較方便的Python 來當作開發工具,但如果再不打包的狀況下,但後來想想,要請受託人自行在Windows 上架設Python 環境並且下指令,未免也太不友善了吧XD。

因爲長期使用macOS,以下將紀錄我在Windows 環境下使用Py2exe 踩到的雷:

Precondition:

  1. 乾淨的Windows 電腦一台 (*註1)
  2. Windows 7 32bit 環境 (*註2)

Step 1:

Python 官方網站下載Python 3.4,並安裝。

Note:安裝方法很簡單,不用刻意改路徑,將會裝在 C:\python34

Step 2:

新增環境變數,用以讓你打開cmd 時可以直接使用python 指令,若不設置此選項也可以考慮直接使用絕對路徑。

Note:設置方法參考如下

  1. 控制台 => 系統及安全性 =>系統 =>進階系統設定 =>環境變數
  2. 編輯系統變數Path
  3. 到變數值的最後加上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 避免相容性問題