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

使用PyInstaller/PyDeploy打包PyGTK应用遇'gi'模块缺失问题求助

解决PyGTK应用打包EXE时gi模块找不到的问题

针对你遇到的打包后提示ModuleNotFoundError: No module named 'gi'的问题,给出以下具体解决步骤:

  • 必须使用MSYS2环境内的PyInstaller
    不要用Windows原生的PyInstaller,打开MSYS2的mingw64终端,先安装适配mingw环境的PyInstaller:

    pacman -S mingw-w64-x86_64-python-pyinstaller
    

    后续所有打包操作都在这个终端里执行,确保环境变量和依赖路径匹配MSYS2的GTK库。

  • 显式指定隐藏导入的gi模块
    PyInstaller默认可能无法自动识别gi的子模块,打包时需要用--hidden-import参数明确指定你用到的模块。比如你的代码用了gi.repository.Gtk,打包命令可以写成:

    pyinstaller --onefile --hidden-import=gi --hidden-import=gi.repository.Gtk sample.py
    
  • 收集所有gi相关依赖文件
    由于gi依赖GObject Introspection的.typelib文件和底层GTK库,用--collect-all参数可以自动收集gi的所有关联文件:

    pyinstaller --onefile --collect-all gi --hidden-import=gi.repository.Gtk sample.py
    
  • 使用spec文件精细化配置(可选但推荐)

    1. 先生成spec文件:
      pyi-makespec sample.py
      
    2. 编辑生成的sample.spec文件,修改以下部分:
      • 在hiddenimports列表中添加用到的gi模块:
        hiddenimports=['gi', 'gi.repository.Gtk', 'gi.repository.GObject', 'gi.repository.Gio']
        
      • 在datas中添加gi的类型库路径:
        datas=[('C:/msys64/mingw64/lib/girepository-1.0/*.typelib', 'girepository-1.0')]
        
      • 在binaries中添加必要的GTK运行时dll(可选,若--collect-all未自动包含):
        binaries=[('C:/msys64/mingw64/bin/libgtk-3-0.dll', '.'), ('C:/msys64/mingw64/bin/libgobject-2.0-0.dll', '.')]
        
    3. 用spec文件打包:
      pyinstaller sample.spec
      
  • 验证打包结果
    打包完成后,进入dist目录运行生成的EXE,若仍有缺失依赖的错误,根据提示补充对应的dll或typelib文件到EXE所在目录。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 16:12:41