為什麼要使用 --add-data
程序裡文件格式有很多種:
源代碼 .py
圖片格式 .png .jpg .ico 等
配置文件 .ini .json .xml等
其他可執行文件 .bin .exe等
模型文件 .pth 等
說明文檔 .txt .md等
注意:除了.py之外,其他格式不會編譯。
除了.py之外,其他格式若要打包進去,需要使用 --add-data 處理,或者手動拷貝(嫌麻煩,你每次都能記住?)
如何使用 --add-data?
用法:pyinstaller x.py --add-data="源地址;目標地址"。 windows以;分割,linux以:分割
例如:將 config 目錄的所有文件打包到目標的 config 文件夾(不存在會自動創建)下
pyinstaller x.py --add-data ".\\config\\*;.\\config"
可使用多次 --add-data
例如:
pyinstaller x.py -n Demo2.0.3 --key [email protected])v -i "res\logo.ico" --add-data=".\*.txt;." --add-data=".\*.json;." --add-data="res\*.*;.\res" --add-data="dist\models\*.*;.\models"
.spec文件裡如何使用 --add-data
# -*- mode: python ; coding: utf-8 -*- block_cipher = pyi_crypto.PyiBlockCipher(key='[email protected])v') a = Analysis(['x.py'], pathex=['D:\\Miniconda3\\envs\\cuda11\\Lib\\site-packages', 'D:\\project\\demo'], binaries=[], datas=[('.\\*.json', '.'), ('res\\*.*', '.\\res'), ('dist\\models\\*.*', '.\\models')], 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='Demo2.0.3', debug=False, bootloader_ignore_signals=False, strip=False, upx=True, console=False , icon='res\\logo.ico') coll = COLLECT(exe, a.binaries, a.zipfiles, a.datas, strip=False, upx=True, upx_exclude=[], name='Demo2.0.3')
Analysis裡的datas就是使用 --add-data對應的地方!
一個[]裡,有多個(),每個()以逗號隔開,左邊是程序路徑,右邊是放入打包裡的路徑!
對於深層路徑要寫完整路徑!
binaries=[('onnxruntime\\capi\\*.*','\\onnxruntime\\capi')],
--add-binary同--add-data類似
————————————————
Thanks to:https://blog.csdn.net/u012219045/article/details/114841287