Pyinstaller打包報錯小結(jié)
問題目錄
1.Pyinstaller打包exe文件,執(zhí)行后提示缺失yaml,csv,dll等資源文件。
2.打包后運行提示 WARNING: file already exists but should not: C:\Users\ADMINI~1\AppData\Local\Temp_MEI130922\torch_C.cp38-win_amd64.pyd。
3.運行exe閃退。
4.(ModuleNotFoundError: No module named 'tensorflow_core.python及FileNotFoundError:No such file or directory)。
5.pyimod04_ctypes.install..PyInstallerImportError: Failed to load dynlib/dll ‘C:\Users\Lenovo\AppData\Local\Temp\_MEI209562\MvCameraControl.dll’. Most likely this dynlib/dll was not found when the application was frozen.
解決方法
問題一:
pyinstaller -F main.py
打包后(我是在conda環(huán)境里面打包的,據(jù)說打包效果好。當(dāng)然也可以用pycharm里面用Terminal命令行),會自動打包main.py文件引用的所有.py文件(僅限py文件),其他的資源文件需要在生成的main.spec文件中手動導(dǎo)入。
a = Analysis(
['open_camera_main.py'],
pathex=[],
binaries=[],
datas=[
**('..\\ultralytics\\yolo\\cfg\\default.yaml', 'ultralytics\\yolo\\cfg'),
('C:\\Program Files (x86)\\Common Files\\MVS\Runtime\\Win64_x64','.'),
('..\\best.pt','.'),
],**
hiddenimports=[],
hookspath=[],
hooksconfig={},
runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher,
noarchive=False,
)
例如,datas[]第一個配置格式 (‘path’ ,‘path’)分別是本地的路徑(可以用絕對路徑,這點無所謂)和exe運行后的虛擬路徑,‘.’就是將資源文件放在根目錄下,并且本文引用的第二個data,可以將一個文件夾全部引用。第三個是訓(xùn)練好的模型文件。
問題二:pyinstaller工具內(nèi)部bug據(jù)說,解決方法也很簡單,就是在生成的main.spec文件中復(fù)制以下代碼。(我是提示了兩次,具體我也沒明白,直接寫了兩個函數(shù)),說白了就是跳過報錯。
for d in a.datas: if 'cp38-win_amd64.pyd' in d[0]: a.datas.remove(d) break for d in a.datas: if 'cp38-win_amd64.pyd' in d[0]: a.datas.remove(d) break
問題三:在生成的main.spec文件中將console賦值True,這樣可以在exe運行時查看報錯。(當(dāng)然打包之前也可以直接-c打包,不過后期偷懶)
exe = EXE(
pyz,
a.scripts,
a.binaries,
a.zipfiles,
a.datas,
[],
name='main',
**debug=True,** 可以debug
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,
)
問題四:打包的時候會遇到很多module和包,或者FileNotFoundError:No such file or directory。很暴力的方法就是在生成的dist文件夾下邊將這些資源文件直接復(fù)制進去即可。講究一點的話,還是查看本地的環(huán)境是否配置了資源文件。
問題五:dll資源我放在data里面,顯示錯誤加載,然后我在代碼里面修改了引用語句,解決了
MvCamCtrldll = os.path.join(os.getcwd(), "MvCameraControl.dll")
之前用的:
MvCamCtrldll = WinDLL("MvCameraControl.dll")
Tips:1.據(jù)說用conda虛擬環(huán)境打包效果會更好。
2.還有就是打包之前運行 pyinstaller -F main.py 可能會提示一些錯誤,例如a/b/c/路徑下面沒有**.yaml文件,我們需要這樣打包。
pyinstaller -F main.py --add-data=~/project/config/config.yaml**;**a/b/c/
到此這篇關(guān)于Pyinstaller打包報錯小結(jié)的文章就介紹到這了,更多相關(guān)Pyinstaller打包報錯內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用Python和python-pptx構(gòu)建Markdown到PowerPoint轉(zhuǎn)換器
在這篇博客中,我們將深入分析一個使用 Python 開發(fā)的應(yīng)用程序,該程序可以將 Markdown 文件轉(zhuǎn)換為 PowerPoint 演示文稿,我們將探討代碼結(jié)構(gòu)、功能和關(guān)鍵組件,并解決一個特定的 bug,需要的朋友可以參考下2025-03-03

