1. 程式人生 > 實用技巧 >python利用pyinstaller打包簡明教程

python利用pyinstaller打包簡明教程

轉自:https://www.jianshu.com/p/48f6dea265eb

pyinstaller簡明教程

安裝pyinstaller

pip install pyinstaller是最簡單的安裝方式,但也常常由於各種原因報錯,這就需要我們通過whl檔案來下載,但是whl檔案安裝也有考究,具體參考我之前的教程:Python安裝whl檔案那些坑,下載whl一般可以在whl檔案倉庫中找到,如果找不到就去第三方庫的官網下載,我個人比較傾向於第二種。

這是我最後一次闡述pip install的問題,後續的教程都不再贅述

pyinstaller基本用法

假如我們要打包一個demo.py檔案,基本過程是:

開啟cmd,並切換到demo.py檔案所在的目錄,注意路徑中不要有中文
執行命令:pyinstaller demo.py
在當前的目錄下,將會生成兩個資料夾:build和dist。dist裡面就是所有可執行檔案,點選demo.exe就能運行了。

pyinstaller指令的常見可選引數:

可選引數格式舉例功能說明
-F pyinstaller -F demo.py 只在dist中生產一個demo.exe檔案。
-D pyinstaller -D demo.py 預設選項,除了demo.exe外,還會在在dist中生成很多依賴檔案,推薦使用。
-c pyinstaller -c demo.py
預設選項,只對windows有效,使用控制檯,就像編譯執行C程式後的黑色彈窗。
-w pyinstaller -w demo.py 只對windows有效,不使用控制檯。
-p pyinstaller -p E:\python\Lib\site-packages demo.py 設定匯入路徑,一般用不到。
-i pyinstaller -i D:\file.icon demo.py 將file.icon設定為exe檔案的圖示,推薦一個icon網站:icon

上面的可選引數可以組合使用,比如pyinstaller -F -i D:\file.icon demo.py


能夠from xxx import yyy就儘量不要import xxx,這樣可以減少打包後的體積。

pyinstaller高階功法

一般而言,pyinstaller的基本用法已經夠用了,但是有特殊需求,比如打包圖片資原始檔時,就必須用到它的高階功法了。

首先得了解spec檔案,簡而言之,spec檔案就是一份告訴pyinstaller如何打包的配置檔案。
可以通過pyi-makespec demo.py來生成demo.spec檔案。其內容如下:

# -*- mode: python -*-

block_cipher = None

resources = (("inspurer.db", "."), ("dlib_face_recognition_resnet_model_v1.dat", "."),
 ("shape_predictor_68_face_landmarks.dat", "."), ("close_logcat.png", ".")
 , ("open_logcat.png", "."), ("finish_register.png", "."), ("new_register.png", ".")
 , ("start_punchcard.png", "."), ("end_puncard.png", "."), ("index.png", "."))

a = Analysis(['workAttendanceSystem.py'],
             pathex=['C:\\Users\\lenovo\\Desktop\\test\\python'],
             binaries=[],
             datas=resources,
             hiddenimports=[],
             hookspath=[],
             runtime_hooks=[],
             excludes=[],
             win_no_prefer_redirects=False,
             win_private_assemblies=False,
             cipher=block_cipher,
             noarchive=False)
pyz = PYZ(a.pure, a.zipped_data,
             cipher=block_cipher)
exe = EXE(pyz,
          a.scripts,
          [],
          exclude_binaries=True,
          name='workAttendanceSystem',
          debug=False,
          bootloader_ignore_signals=False,
          strip=False,
          upx=True,
          console=True )
coll = COLLECT(exe,
               a.binaries,
               a.zipfiles,
               a.datas,
               strip=False,
               upx=True,
               name='workAttendanceSystem')

對於上面這個檔案,需要注意兩點:

除了resources配置是我新增修改之外,其餘全是自動生成,這個配置是用來新增資原始檔的。
pathex是工程的根目錄。

生成並配置好spec檔案後,我們可以通過pyinstaller demo.spec來執行打包任務。