You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PyInstaller配合UPX压缩exe提示Failed to execute script如何解决

问题原因分析

该报错核心是UPX对OpenCV相关的DLL文件压缩时存在兼容性问题,部分带有数字签名、特殊段结构的DLL被UPX压缩后会出现内存映射异常,导致加载失败。不使用UPX时程序可正常运行,已经排除代码本身、PyInstaller基础打包逻辑的问题,问题完全出在UPX对特定DLL的压缩环节。

排查步骤
  • 首先找到PyInstaller打包时生成的build临时目录,或者dist输出目录里的cv2相关文件,常见易出问题的文件包括opencv_worldxxx.dll、opencv_videoio_ffmpegxxx.dll、cv2扩展文件cv2.cp3x-win_amd64.pyd
  • 先将这类文件从UPX压缩列表中排除后重新打包测试,若可正常运行即可确认是这些文件的兼容性问题
  • 若依然报错,可逐个排除其他第三方库的DLL、pyd文件,直到定位到导致异常的压缩对象
具体解决方案

方案1:打包时指定UPX排除规则(兼容性最好,无需修改工具版本)

PyInstaller原生支持配置UPX排除文件列表,打包时追加--upx-exclude参数即可,示例命令如下:

pyinstaller -F -w --upx-dir "你的UPX本地目录路径" --upx-exclude "opencv_world*.dll" --upx-exclude "opencv_videoio_ffmpeg*.dll" --upx-exclude "cv2.*.pyd" main.py

如果使用spec文件打包,直接在EXE配置段添加upx_exclude=['opencv_world*.dll', 'opencv_videoio_ffmpeg*.dll', 'cv2.*.pyd']即可。

方案2:更换UPX版本

部分老旧版本、测试版UPX对Windows平台DLL的压缩兼容性较差,可尝试更换为UPX 3.96稳定版,测试是否可以正常压缩所有文件无异常。

方案3:仅压缩主程序文件

如果嫌排查排除文件麻烦,可以先不加UPX参数完成打包,之后单独对dist目录下的主程序main.exe执行UPX压缩,其他依赖的DLL、pyd文件保持原状态,既可以缩减主程序体积,也能避免依赖文件压缩出错。

额外注意事项
  • 代码中涉及的powershell调用、注册表写入、公共目录复制等操作属于敏感行为,部分杀毒软件会将UPX压缩后的程序判定为恶意程序,运行被拦截时可临时关闭实时防护测试,或给程序添加数字签名。
  • 不要使用UPX的极端压缩参数--ultra-brute,该参数输出的文件兼容性极差,极易出现运行异常。

内容的提问来源于stack exchange,提问作者robotmr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 15:48:02