PyGobject(一)安装篇

本文详细介绍了如何在MacOSX系统上使用jhbuild安装GTK+及相关库,包括解决过程中遇到的各种问题的方法。
部署运行你感兴趣的模型镜像

PyGObject是一个Python模块,使开发人员可以访问基于GObject的库,如Python中的GTK+。它独家支持GTK+3版或更高版本。

由于博主使用的是macbook,所以安装方法适用于Mac OS X,其它系统大致相同,可以参考。

使用jhbuild安装

安装jhbuild

$ brew install wget
$ sh gtk-osx-build-setup.sh 
设置环境变量
$ export PATH=~/.local/bin:$PATH
$ jhbuild bootstrap  

可能报错:
1.jhbuild: The default location of the configuration file has changed. Please move /Users/xiaosanyu/.jhbuildrc to /Users/xiaosanyu/.config/jhbuildrc.
解决办法:

$ cp /Users/xiaosanyu/.jhbuildrc /Users/xiaosanyu/.config/jhbuildrc
$ rm /Users/xiaosanyu/.jhbuildrc

2.EnvironmentError: MacOSX10.10.sdk not found
解决办法:
下载MacOSX10.10.sdk,将解压后的文件夹放到如下路径下
Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/

3.configure: error: XML::Parser perl module is required for intltool
解决办法:
下载XML-Parser
解压后编译安装

$ perl Makefile.PL
$ make
$ make install

安装gtk3核心库

$ jhbuild build meta-gtk-osx-gtk3

如果报错:
checking for XML::Simple… configure: error: XML::Simple perl module is required for icon-naming-utils
选4

$ cpan install XML::Simple

进入网站http://download.gnome.org/teams/releng/ 下载最新的xxx. modules
放到~/Source/jhbuild/modulesets中
然后修改~/.config/jhbuildrc,最后添加

use_local_modulesets = True

makeargs ='-j16'
moduleset = "gnome-apps-3.20"
autogenargs='--disable-static --disable-gtk-doc PYTHON=python3'
modules = [ 'meta-gnome-core', 'meta-gnome-apps-tested' ]
skip = ['telepathy-logger','gtk-doc','glade', 'telepathy-mission-control', 'gnome-photos', 'gitg', 'vala','gdlmm']
module_autogenargs['pygobject']= '--with-python=/Library/Frameworks/Python.framework/Versions/3.4/bin/python3.4'
module_autogenargs['glib-networking']='--without-ca-certificates'

安装pygobject和gtk+

$ jhbuild sanitycheck
$ jhbuild build pygobject
$ jhbuild build gtk+

如果报错
No package ‘cairo-gobject’ found

$ git clone git://anongit.freedesktop.org/git/cairo
$ cd cairo
$ ./autogen.sh --prefix=/Users/xiaosanyu/gtk/inst PYTHON=python3  --enable-xcb-shm  --enable-quartz
$ make -j16
$ make install

报错Requested ‘libpcre >= 8.13’ but version of libpcre is 8.02
下载libpcre

$ tar -vxzf /Users/xiaosanyu/Downloads/pcre-8.38.tar.gz
$ cd pcre-8.38
$ ./configure --enable-pcre16 --enable-pcre32 --enable-ucp --enable-unicode-properties --enable-rebuild-chartables --enable-newline-is-any
$ make
$ make install

$ export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH

报错No package ‘py3cairo’ found
安装py3cairo

$ git clone git://git.cairographics.org/git/pycairo
$ cd pycairo
$ python3 setup.py install
$ export PKG_CONFIG_PATH=/Library/Frameworks/Python.framework/Versions/3.4/lib/pkgconfig:$PKG_CONFIG_PATH

成功后,将~/gtk/inst/lib/python3.4/site-packages中的内容拷贝到python3的site-packages目录下

Windows下安装

见博主另一博文
http://blog.youkuaiyun.com/a87b01c14/article/details/52229393





代码下载地址:http://download.youkuaiyun.com/detail/a87b01c14/9594728

您可能感兴趣的与本文相关的镜像

Python3.11

Python3.11

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

<think>我们正在解决的是:在Linux下使用pywebview打包程序时遇到的PyGObject安装报错问题。 根据引用内容,我们知道pywebview支持多种GUI后端(如GTK, QT, cef等)。在Linux下,GTK和QT是两种主要的后端选择。 而报错信息中明确提到: [pywebview] GTK cannot be loaded ModuleNotFoundError: No module named 'gi' 这里的'gi'模块是PyGObject部分,它是GTK的Python绑定。因此,我们需要确保在打包环境中正确安装PyGObject,并且在打包过程中能够正确包含这些依赖。 另外,引用[1]和[2]提到,当使用不同的GUI后端时,打包配置也会有所不同。特别是,如果选择CEF后端,还需要额外安装cefpython3,并且注意hook文件的位置。但用户的问题集中在GTK/QT的加载失败,且特别提到PyGObject安装报错,因此我们重点解决GTK后端的问题。 解决方案步骤: 1. 确保在开发环境中正确安装PyGObject和GTK的依赖。 2. 在打包时(使用PyInstaller),需要正确添加隐藏导入和钩子,以确保打包后的应用能够包含必要的模块和资源。 具体步骤: 步骤1:安装PyGObject和GTK开发库 在Ubuntu/Debian系统上,运行: sudo apt install libgtk-3-0 libgirepository1.0-dev pip install PyGObject 步骤2:在代码中指定使用GTK后端(可选,但可以避免自动选择失败) import webview webview.start(gui='gtk', ...) # 在start函数中明确指定gui='gtk' 步骤3:创建PyInstaller钩子文件(hook-gi.py)来处理gi模块 由于PyInstaller默认无法正确打包gi模块,我们需要创建个钩子文件。创建文件`hook-gi.py`,内容如下: ```python # hook-gi.py from PyInstaller.utils.hooks import collect_data_files, collect_submodules hiddenimports = collect_submodules('gi') datas = collect_data_files('gi', include_py_files=True) ``` 步骤4:打包命令 使用PyInstaller打包时,需要包含这个钩子,并指定隐藏导入: pyinstaller --onefile \ --additional-hooks-dir=. \ # 指定钩子文件所在目录(当前目录) --hidden-import=gi \ # 显式隐藏导入gi your_script.py 注意:如果系统中同时安装了QT,并且你希望同时支持QT,那么也需要安装PyQt5和PyQtWebEngine,并添加相应的隐藏导入。但用户问题主要针对GTK,所以先解决GTK。 步骤5:解决资源文件问题 根据引用[2]中的经验,有时还需要添加其他资源文件。对于GTK,可能需要将girepository的typelsib文件也包含进去。可以通过以下方式获取路径并添加到数据文件中: --add-data "$(python -c 'import gi; print(gi.__path__[0])'):gi" 步骤6:如果上述步骤仍然失败,可以尝试在打包时使用`--paths`参数指定gi模块的路径: --paths /path/to/gi 其中路径可以通过`python -c "import gi; print(gi.__path__[0])"`获取。 完整打包命令示例: pyinstaller --onefile \ --additional-hooks-dir=. \ --hidden-import=gi \ --add-data "$(python -c 'import gi; print(gi.__path__[0])'):gi" \ --paths /usr/lib/python3/dist-packages \ # 根据实际情况调整 your_script.py 注意:上面的`/usr/lib/python3/dist-packages`是gi模块可能所在的路径,具体路径需要根据系统环境确定。 步骤7:如果仍然遇到问题,可以尝试在虚拟环境中重新安装PyGObject,并确保在打包时使用相同的环境。 关于引用[3]:提到pyHook只能在Windows平台使用,这与当前问题无关,可以忽略。 总结:关键点在于确保PyGObject被正确安装,并且在打包时通过钩子和数据文件将gi模块及其依赖正确包含。 相关问题: 1. 如何解决Linux下PyInstaller打包GTK应用时的资源文件缺失问题? 2. 如何为pywebview应用选择最佳的后端(GTK/QT)? 3. 在Linux下打包pywebview应用时,如何处理不同桌面环境的兼容性问题? </think> ### 解决 Linux 下 PyGObject 安装报错问题 #### 根本原因分析 PyGObject(`gi`模块)是GTK后端的核心依赖,报错`No module named 'gi'`表明: 1. **未安装PyGObject**:打包环境缺少Python绑定 2. **路径未正确包含**:PyInstaller未正确打包`gi`模块[^1] 3. **ABI不兼容**:PyGObject与系统GTK库版本不匹配 --- #### 解决方案(分步操作) ##### 步骤1:安装系统级依赖 ```bash # Ubuntu/Debian sudo apt install libgtk-3-dev libgirepository1.0-dev libcairo2-dev \ libwebkit2gtk-4.0-37 gir1.2-webkit2-4.0 # Fedora/CentOS sudo dnf install gtk3-devel gobject-introspection-devel \ cairo-devel webkit2gtk3-devel ``` ##### 步骤2:创建隔离环境并安装Python依赖 ```bash python -m venv .venv source .venv/bin/activate pip install --upgrade pip setuptools wheel # 安装带C扩展的PyGObject pip install pycairo # 必须先安装 pip install PyGObject --no-binary PyGObject ``` ##### 步骤3:验证GTK可用性 创建测试文件`test_gtk.py`: ```python import gi gi.require_version("Gtk", "3.0") from gi.repository import Gtk window = Gtk.Window(title="Test") window.connect("destroy", Gtk.main_quit) window.show_all() Gtk.main() ``` 运行验证: ```bash python test_gtk.py # 应显示GTK窗口 ``` ##### 步骤4:PyInstaller打包配置 创建钩子文件`hook-gi.py`: ```python # hook-gi.py from PyInstaller.utils.hooks import collect_data_files, collect_submodules hiddenimports = collect_submodules('gi') datas = collect_data_files('gi', include_py_files=True) ``` 打包命令: ```bash pyinstaller --onefile \ --additional-hooks-dir=. \ --hidden-import=gi \ --add-data "$(python -c 'import gi; print(gi.__path__[0])'):gi" \ --add-binary "/usr/lib/x86_64-linux-gnu/girepository-1.0/*.typelib:gi/repository" \ your_app.py ``` ##### 步骤5:解决常见问题 1. **ABI版本冲突**: ```bash # 检查ABI兼容性 ldd $(which python) | grep -E 'gobject|gio' # 若存在冲突,强制指定版本 export GI_TYPELIB_PATH=/usr/lib/x86_64-linux-gnu/girepository-1.0 ``` 2. **缺失typelib文件**: ```bash # 查找所有typelib文件 sudo find / -name 'Gtk-3.0.typelib' 2>/dev/null # 在打包命令中添加路径 --add-binary "/found/path/Gtk-3.0.typelib:gi/repository" ``` 3. **GLib版本不匹配**: ```bash # 安装对应版本的gobject-introspection sudo apt install libgirepository-1.0-1=1.66.1-1~ubuntu20.04.1 ``` --- #### 验证打包结果 解包检查: ```bash # 查看打包内容 ./dist/your_app --paths # 检查gi模块是否包含 unzip -l dist/your_app | grep gi/repository ``` 运行验证: ```bash # 设置调试模式 export G_DEBUG=fatal-criticals ./dist/your_app ``` --- #### 备选方案:使用Docker构建 若仍存在问题,使用Docker确保环境致性: ```Dockerfile FROM ubuntu:20.04 RUN apt update && \ apt install -y python3-pip python3-venv \ libgtk-3-dev libgirepository1.0-dev WORKDIR /app COPY . . RUN python3 -m venv .venv RUN . .venv/bin/activate && \ pip install pycairo PyGObject pywebview pyinstaller RUN . .venv/bin/activate && \ pyinstaller --onefile \ --add-data "$(python -c 'import gi; print(gi.__path__[0])'):gi" \ your_app.py ``` --- #### 关键注意事项 1. **PyGObject编译**: - 必须从源码安装(`--no-binary`选项) - 确保系统存在`gcc`和Python头文件 2. **路径映射**: ```bash # 获取实际路径 python -c "import gi; print(gi.__path__[0])" # 输出示例:/usr/lib/python3/dist-packages/gi ``` 3. **版本兼容性矩阵**: | 组件 | 推荐版本 | |--------------|---------------| | PyGObject | ≥3.42.0 | | GTK | 3.24.x | | Python | 3.8-3.10 | [^1]: PyInstaller默认无法处理gi模块的动态加载,需手动指定路径
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sanxiaochengyu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值