PyInstaller生成的EXE运行失败:PIL_imaging.pyd解压错误求助
解决PyInstaller打包后PIL_imaging.pyd解压失败的问题
问题分析
报错[3344] Failed to extract PIL_imaging.cp310-win_amd64.pyd: decompression resulted in return code -1!,本质是PyInstaller解压打包的二进制文件时失败,大概率和PIL库的打包处理逻辑、压缩设置或缓存文件损坏有关。
解决方案
1. 清理缓存后重新打包
PyInstaller的缓存文件可能损坏,导致生成的EXE存在异常:
- 删除脚本目录下的
build、dist文件夹,以及自动生成的*.spec文件 - 用干净的命令重新打包,示例:
pyinstaller --onefile --windowed your_script_name.py
2. 禁用压缩功能
PyInstaller默认的压缩算法可能和PIL的二进制文件冲突,尝试关闭压缩:
pyinstaller --onefile --windowed --noconsole --compress=0 your_script_name.py
--compress=0会让EXE体积变大,但能避免解压错误。
3. 手动指定PIL的pyd文件路径
找到Python环境中PIL_imaging.cp310-win_amd64.pyd的位置(通常在Lib\site-packages\PIL目录下),打包时用--add-data参数强制包含:
pyinstaller --onefile --windowed --add-data "C:\Python310\Lib\site-packages\PIL\PIL_imaging.cp310-win_amd64.pyd;PIL" your_script_name.py
注意Windows系统下路径分隔符用;。
4. 调整Pillow版本
部分Pillow版本和PyInstaller存在兼容性问题,尝试切换到稳定版本:
- 卸载当前版本:
pip uninstall pillow -y - 安装兼容版本(比如9.5.0):
pip install pillow==9.5.0
完成后重新打包。
5. 自定义.spec文件配置
如果上述方法无效,生成.spec文件后手动修改配置:
- 生成spec文件:
pyinstaller your_script_name.py - 打开生成的
your_script_name.spec,在Analysis段添加PIL文件路径并排除UPX压缩:a = Analysis( ['your_script_name.py'], datas=[('C:\Python310\Lib\site-packages\PIL\PIL_imaging.cp310-win_amd64.pyd', 'PIL')], upx_exclude=['PIL_imaging.cp310-win_amd64.pyd'], # 保留原有其他配置 ) - 用spec文件重新打包:
pyinstaller your_script_name.spec
额外检查
- 确认Python环境是64位(和报错的
win_amd64对应),避免位数不匹配 - 打包时关闭杀毒软件,部分杀毒软件会拦截或修改PyInstaller生成的EXE文件
内容的提问来源于stack exchange,提问作者Phillip Wood
相关产品推荐
相关产品推荐

