簡要
pyinstaller模塊主要用于python代碼打包成exe程式直接使用,這樣在其它電腦上即使沒有python環境也是可以運行的,
用法
一.安裝
pyinstaller屬于第三方庫,因此在使用的時候需提前安裝
pip install pyinstaller
二.配置spec檔案
1.配置生成exe程式檔案夾
(1)如果不熟悉spec配置內容,可以在終端運行如下指令生成固定模板
pyinstaller --name myapp main.py # myapp為生成的spec檔案名稱,main.py為打包的檔案
(2)運行完后我們會看見如下幾個檔案,dist和build直接洗掉即可,我看打開myapp.spec檔案可以看見配置資訊,

# -*- mode: python ; coding: utf-8 -*- block_cipher = None a = Analysis( ['main.py','hello.py'], 注:要打包的模塊,按照先后順序運行 pathex=['C:/Users/pythonProject'], 注:要打包的Python源代碼的路徑串列, binaries=[], 注: datas=[], 注:要打包的非Python資源(例如影像、組態檔等)串列, hiddenimports=[''requests], 注:必需的隱藏匯入串列,用于告訴PyInstaller找到其他未明確指定的依賴項, hookspath=[], 注:一個路徑串列,其中包含指定要自定義的鉤子模塊的目錄, hooksconfig={}, 注: runtime_hooks=[], 注:用于在應用程式運行時運行的Python代碼檔案串列, excludes=[], 注:不包括在生成的可執行檔案中的模塊串列 win_no_prefer_redirects=False, 注: win_private_assemblies=False, cipher=block_cipher, 注:用于加密Python位元組碼的密碼, noarchive=False, ) pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher)
注:a.pure: 一個布林值,指示是否生成純Python位元組碼,如果為True,則PyInstaller將不包括任何二進制檔案或庫,
a.zipped_data: 用于包含OneFile模式下的所有Python腳本和資源的元組,
exe = EXE( pyz, 注:一個PYZ實體,其中包含要打包的所有Python腳本和資源, a.scripts, 注:應用程式的主Python腳本串列, [], exclude_binaries=True, name='myapp', 注:生成exe可執行檔案的名稱 debug=False, 注:一個布林值,指示是否生成除錯版本的可執行檔案 bootloader_ignore_signals=False, 注:一個布林值,指示是否忽略啟動加載器的信號, strip=False, 注:一個布林值,指示是否對可執行檔案進行符號剝離, upx=True, 注:一個布林值,指示是否使用UPX壓縮可執行檔案 console=True, 注:是否開啟dos視窗 disable_windowed_traceback=False, argv_emulation=False, target_arch=None, codesign_identity=None, entitlements_file=None,
icon:'圖示.ico' 注:用戶生成exe檔案的封面,后綴必須是ico格式,轉換地址:https://convertio.co/zh/download/88c5806204642c8a1c10e65b1bef9b5886f6d8/ ) coll = COLLECT( exe, 注:你的Python腳本生成的可執行檔案路徑(通常是與spec檔案同名的檔案) a.binaries, 注:二進制物件串列,表示其他相關二進制檔案的位置以及將它們復制到輸出目錄的相對路徑,例如,如果您的應用程式需要音頻或影像檔案,則可以使用此引數將其包含在可執行檔案中, a.zipfiles, 注:壓縮檔案串列,表示應該從zip檔案中提取哪些檔案并將它們放入輸出目錄,這對于打包一些必需的庫或資料檔案非常有用, a.datas, 注:資料檔案串列,這些檔案不應被壓縮,但應該被復制到輸出目錄中,例如,這可能包括組態檔、模板檔案或其他型別的文本檔案, strip=False, 注:是否從可執行檔案和庫中去除除錯資訊,默認情況下為True,這將減小檔案大小,但會使得除錯更加困難, upx=True, 注:是否使用UPX來壓縮可執行檔案和庫,默認情況下為False,因為UPX可能會導致某些檔案無法正常作業, upx_exclude=[], 注: name='myapp', 注:打包檔案夾名稱, )
(3)通常我們只需要配置需要打包的模塊+pathex+生成exe檔案的名稱+exe存在目錄的名稱,配置完后直接在終端
輸入指令進行打包,
pyinstaller myapp.spec
(4)打包完成后在專案所在目錄下可以看下dist檔案,dist檔案下一目錄就是打包檔案夾,檔案夾下面就是所在的
程式,這里需要注意的是,因為我們打包的是檔案夾,因此發給別人使用的時候,因把整個檔案夾發過去,
才能正確運行,

(5)配置要打包的模塊,若模塊之間存在import連接,可直接打包最終(main)運行的那個模塊即可,pyinstaller會
默認把main涉及的impor(.py+第三方庫)全部一起打包,若兩個py模塊相互沒有任何關聯,這個時候可以打
包多個,
2.配置生成獨立的exe檔案
(1)這里和上面步驟一樣,先生成模板
pyinstaller -F main.py
(2)模板大概樣式如下,欄位意思和上面一致,
# -*- mode: python ; coding: utf-8 -*- block_cipher = None a = Analysis( ['main.py'], pathex=[], binaries=[], datas=[], hiddenimports=[], hookspath=[], hooksconfig={}, 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, a.binaries, a.zipfiles, a.datas, [], name='hello', debug=False, bootloader_ignore_signals=False, strip=False, upx=True, upx_exclude=[], runtime_tmpdir=None, console=True, disable_windowed_traceback=False, argv_emulation=False, target_arch=None, codesign_identity=None, entitlements_file=None, )
(3)配置完成后終端運行指令打包,打包完成后會看見dist目錄下只有一個exe檔案,
pyinstaller myapp.spec

三.除了配置spec檔案,還可以直接通過pyinstaller指令來直接打包,這里就不做多介紹了,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/551048.html
標籤:其他
下一篇:返回列表
