如何在Windows环境下为Python 3.7编译GTK/PyGObject全合一安装包?
Windows平台Python 3.7+ 版本PyGObject(PyGI)全合一安装包制作方案
旧版公开的pygobjectwin32包确实已停止更新,最高仅支持Python 3.4,目前行业内通用的替代方案是从MSYS2环境提取完整依赖,打包为可独立分发的全合一包,效果和你之前使用的PyGTK全合一包完全一致,具体步骤如下:
- 准备MSYS2构建环境
打开MSYS2的Mingw-w64 64位终端,先执行pacman -Syu更新系统源,重复运行直到所有包更新完成。根据你需要的Python版本安装对应依赖,以Python 3.10、64位环境为例,安装命令为:pacman -S mingw-w64-x86_64-python3 mingw-w64-x86_64-gtk3 mingw-w64-x86_64-python-gobject mingw-w64-x86_64-python-cairo mingw-w64-x86_64-gobject-introspection。如果你的应用需要其他GI绑定(如GtkSourceView、GStreamer等),也可提前通过pacman安装对应包。 - 提取独立PyGI运行环境
新建空文件夹作为打包根目录,例如D:\pygi-package。将MSYS2安装路径下的mingw64\bin、mingw64\lib\python3.10(替换为你安装的Python小版本号)、mingw64\lib\girepository-1.0、mingw64\share\glib-2.0、mingw64\share\icons这几个核心目录完整复制到打包根目录中。
之后运行ldd mingw64\bin\python.exe和ldd mingw64\bin\libgirepository-1.0-1.dll命令,检查所有依赖的dll文件,将遗漏的dll全部复制到打包根目录的bin文件夹下,避免运行时缺库报错。 - 验证环境可用性
将打包根目录移动到和MSYS2完全无关的路径(例如桌面),运行根目录下bin文件夹中的python.exe,依次执行以下代码验证功能:
确认可以正常弹出GTK窗口、无任何报错后,即说明环境提取成功。import gi gi.require_version('Gtk', '3.0') from gi.repository import Gtk win = Gtk.Window(title='PyGI Test') win.connect('destroy', Gtk.main_quit) win.show() Gtk.main() - 打包为全合一安装包
你之前已经有InnoSetup的使用经验,直接将打包根目录的所有文件和官方Python 3.x Windows安装包整合到你的安装脚本中即可。安装时可选择将PyGI的bin目录加入系统PATH,也可仅为你的应用配置私有环境调用,和之前分发Python 2/PyGTK应用的逻辑完全兼容。
小提示:如果需要缩减安装包体积,可以删除Python目录下的测试文件、site-packages中不需要的内置库,以及dll文件中的调试符号,最终体积可压缩至原提取包的30%左右。
内容的提问来源于stack exchange,提问作者Daniel Gonçalves
相关产品推荐
相关产品推荐

