1. 程式人生 > >將Python打包成 exe可執行檔案

將Python打包成 exe可執行檔案

利用Python寫了一個小指令碼想要傳給使用Windows但沒有裝Python的朋友執行,這時候就可以利用將檔案包裝成exe檔案,讓沒有Python的朋友也可以執行。本篇將介紹利用套件「PyInstaller」製作exe檔。

安裝方法

# 安裝pyinstaller
pip install pyinstaller
# 安裝依賴
pip install pywin32-ctypes

常用引數介紹

  • pyinstaller -h 來檢視引數
  • -F 打包成一個exe檔案
  • -i 圖示路徑
  • -w 使用視窗,無控制檯
  • -c 使用控制檯,無視窗
  • -D 建立一個目錄,包含exe以及其他一些依賴性檔案

編譯檔案時,我們通常使用如下命令:

pyinstaller -F -w -i favo.ico main.py

靜態檔案

對於python所依賴的圖片,config.yaml等靜態檔案,pyinstall不會自動打包,需要手動在main.py(所需要打包的入口檔案)的相同目錄中尋找main.spec,修改datas依賴,才可以自動打包到exe的相同目錄下,然後執行即可

datas是一個數組,每個子項是一個tuple,其中tuple的第一個引數是你要打包的源路徑,第二個引數是打包後的名字

# -*- mode: python -*-

block_cipher = None


a = Analysis(['ui.py'],
             pathex=['C:\\Users\\user\\Desktop\\resilio\\toyou\\code\\zeus_board_test'],
             binaries=[],
             datas=[('C:\\Users\\user\\Desktop\\resilio\\toyou\\code\\zeus_board_test\\images','images'),('C:\\Users\\user\\Desktop\\resilio\\toyou\\code\\zeus_board_test\\question.yaml','question.yaml')],
             hiddenimports=[],
             hookspath=[],
             runtime_hooks=[],
             excludes=[],
             win_no_prefer_redirects=False,
             win_private_assemblies=False,
             cipher=block_cipher,
             noarchive=False)

然後執行:

pyinstaller -F main.spec

示例

如下圖所示,我們編寫一個輸出 helow pyinstaller 的Python程式,並利用input()使程式可以暫時停在輸出畫面。

print('helow pyinstaller')
input('please wait:')

編譯python為exe,編譯過程中會自動安裝相關依賴

pyinstaller -F hello.py

編譯過程中會產生如下輸出:

...
6942 INFO: checking PYZ
6944 INFO: Building because toc changed
6944 INFO: Building PYZ (ZlibArchive) C:\Users\user\Desktop\test\build\test\PYZ-00.pyz
7559 INFO: Building PYZ (ZlibArchive) C:\Users\user\Desktop\test\build\test\PYZ-00.pyz completed successfully.
7568 INFO: checking PKG
7569 INFO: Building because toc changed
7569 INFO: Building PKG (CArchive) PKG-00.pkg
9407 INFO: Building PKG (CArchive) PKG-00.pkg completed successfully.
9409 INFO: Bootloader c:\users\user\appdata\local\programs\python\python36\lib\site-packages\PyInstaller\bootloader\Windows-64bit\run.exe9409 INFO: checking EXE
9411 INFO: Building because toc changed
9411 INFO: Building EXE from EXE-00.toc
9412 INFO: Appending archive to EXE C:\Users\user\Desktop\test\dist\test.exe
9455 INFO: Building EXE from EXE-00.toc completed successfully.

通過輸出可以看出pyinstaller進行了如下操作:

  • 會先建立一個 hello.spec
  • 建立「build」 資料夾
  • 建立 log紀錄檔與工作檔案於資料夾 build 中
  • 建立 「dist 」資料夾
  • 建立執行檔(.exe)在 「dist」 資料夾

注意事項

執行檔案可在win8/win10,64位元的電腦執行,但win7 x64和其餘所有32位失敗,會提示不相容,若要能32位元與64位元皆可執行,就要在Python 32位元的環境下編譯PyInstaller打包exe,才能在32位元與64位元成