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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 18:16:59