Python 使用 pyinstaller 將程式打包成 exe 發佈

本篇介紹如何使用 pyinstaller 將 python 程式打包成 exe 執行檔發佈,學會這招後將可以把 exe 執行檔拿到任何 windows 電腦裡執行,即使那台 windows 電腦沒有裝 python 環境也可以執行唷!

安裝 pyinstaller

pyinstaller 是一個方便的 python 模組,將 python 的 .py 檔打包成為 exe 執行檔,過程會將所有的相依模組一併打包。
如果沒有 pyinstaller, 先用 pip 安裝

1
pip install pyinstaller

離線安裝 pyinstaller

PyPI下載,目前沒有提供.whl檔下載,
以目前下載到的PyInstaller-3.6.tar.gz為例子的話,輸入下列pip指令就會去安裝pyinstaller

1
pip install PyInstaller-3.6.tar.gz

很可惜地似乎安裝過程中會有其他相依的套件,pip試圖連網安裝缺少的相依套件,結果最後因為離線關係會連線逾時

conda-forge下載 pyinstaller-3.6-py37h7602738_0.tar.bz2
用 conda 指令安裝:

1
conda install pyinstaller-3.6-py37h7602738_0.tar.bz2

以為用 conda-forge 的離線包就能裝完全部相依套件,
最後發現還是少一些套件,只好認命的把缺少的裝一裝了,
分別是

1
2
3
pip install pywin32_ctypes-0.2.0-py2.py3-none-any.whl
pip install pefile-2019.4.18.tar.gz
pip install altgraph-0.17-py2.py3-none-any.whl

裝完後就發現 pyinstaller 指令可以使用了!

使用範例

使用pyinstaller打包成exe最簡單的範例如下所示,預設是會打包成一個資料夾,
pyinstaller 會去分析程式中所用到的 module,最後把這些東西放在一個資料夾或單一執行檔(看你使用的參數)
以這個範例來說,會打包成一個yourprogram資料夾,yourprogram資料夾裡面會有一個yourprogram.exe

1
pyinstaller yourprogram.py

使用pyinstaller打包成一個執行檔exe,並且不顯示 cmd 視窗,

1
pyinstaller -F -w yourprogram.py

常用參數介紹

-h, --help:查看說明
-F:打包成一個exe文件
-w, --windowed:不顯示 cmd 視窗
-c, --console:顯示 cmd 視窗
-D, --onedir:打包成一個資料夾(預設)
-F, --onefile:打包成一個執行檔
--noup:不使用 upx
--upx-dir UPX_DIR:指定 upx 的資料夾,用來可壓縮執行檔
--version-file=file_version_info.txt:帶入版本資訊,可以在exe右鍵內容>詳細資料>明細內容 查看到該資訊

如果沒有版本資訊 file_version_info.txt,可以從任一個exe執行檔右鍵內容有版本號資訊的提取出來,之後在修改成自己想要的格式,
要提取的指令如下所示,輸入完後提取完畢後會產生file_version_info.txt,

1
2
cd Lib\site-packages\PyInstaller\utils\cliutils\
python grab_version.py <含有版本資訊的exe執行檔>

參考
將Python打包成exe檔
https://medium.com/pyladies-taiwan/python-將python打包成exe檔-32a4bacbe351
pyinstaller 離線安裝 | 只是個打字的
https://blog.typeart.cc/pyinstaller%20%E9%9B%A2%E7%B7%9A%E5%AE%89%E8%A3%9D/
pyinstaller常用參數 | 只是個打字的
https://blog.typeart.cc/pyinstaller%e5%b8%b8%e7%94%a8%e5%8f%83%e6%95%b8/

相關主題
Python 在 Windows 下使用 Pycharm IDE 教學
Python 第一支 Python 程式
Python 計算程式執行時間