Windows下使用PyInstaller打包Python+PyGtk脚本失败求助
解决MSYS2下PyInstaller打包PyGtk脚本失败的问题
从错误日志来看,核心问题是PyInstaller调用gdk-pixbuf-query-loaders.EXE生成加载器缓存时返回非零状态3,以下是针对性的解决步骤:
手动排查
gdk-pixbuf-query-loaders的错误
打开MSYS2的MinGW64终端,直接执行:gdk-pixbuf-query-loaders观察输出的具体错误信息,通常是某个图片加载器(比如SVG加载器)的依赖库缺失,根据提示安装对应的包即可(例如SVG加载器依赖
mingw-w64-x86_64-librsvg)。指定正确的GdkPixbuf缓存文件
先重新生成系统级加载器缓存:gdk-pixbuf-query-loaders --update-cache然后在运行PyInstaller前,手动指定缓存文件的环境变量:
export GDK_PIXBUF_MODULE_FILE=/mingw64/lib/gdk-pixbuf-2.0/2.10.0/loaders.cache pyinstaller gtk_test.py修改PyInstaller的GdkPixbuf钩子
找到钩子文件C:/msys64/mingw64/lib/python3.10/site-packages/PyInstaller/hooks/hook-gi.repository.GdkPixbuf.py,修改_generate_loader_cache函数:- 替换原有的
compat.exec_command_stdout调用,改为直接读取系统已生成的loaders.cache文件内容,跳过执行出错的加载器检测步骤。 - 示例修改:
def _generate_loader_cache(gdk_pixbuf_query_loaders, libdir, loader_libs): # 直接读取系统缓存文件 cache_path = os.path.join(libdir, 'gdk-pixbuf-2.0', '2.10.0', 'loaders.cache') with open(cache_path, 'r', encoding='utf-8') as f: return f.read()
- 替换原有的
先尝试文件夹模式打包
避免使用单文件模式的额外复杂度,先打包成文件夹模式排查问题:pyinstaller --onedir gtk_test.py运行生成的
dist/gtk_test/gtk_test.exe,如果仍然报错,检查文件夹中是否缺少必要的DLL文件,手动从C:/msys64/mingw64/bin复制对应的依赖进去。更新MSYS2相关包
确保所有依赖包都是最新版本:pacman -Syu pacman -S mingw-w64-x86_64-python-gobject mingw-w64-x86_64-python-pyinstaller mingw-w64-x86_64-gtk3 mingw-w64-x86_64-gdk-pixbuf2
内容的提问来源于stack exchange,提问作者Luca Saiani
相关产品推荐
相关产品推荐

