使用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文件精细化配置(可选但推荐)
- 先生成spec文件:
pyi-makespec sample.py - 编辑生成的
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', '.')]
- 在
- 用spec文件打包:
pyinstaller sample.spec
- 先生成spec文件:
验证打包结果
打包完成后,进入dist目录运行生成的EXE,若仍有缺失依赖的错误,根据提示补充对应的dll或typelib文件到EXE所在目录。
内容的提问来源于stack exchange,提问作者dororo
相关产品推荐
相关产品推荐

