MacOS下安装PyGObject失败、构建wheel及导入Gtk报错求助
问题描述
- 在MacOS系统中先后通过pip、brew两种方式安装PyGObject,参照官方操作指南执行后始终安装失败。
- 已成功安装gtk+3,但执行库导入测试命令时直接报错,测试命令与报错片段如下:
python3 -c 'import gi; gi.require_version("Gtk", "3.0"); print("ok")' Traceback (most recent call last): File "<string>", line 1, in <module>
- 执行
pip3 install gobject pygobject命令安装时,构建PyGObject的wheel包失败,核心报错为cairo相关符号缺失,关键错误信息如下:
ImportError: dlopen(/private/var/folders/t0/_kkpxc35687gknp4d99b9lbr0000gn/T/pip-build-env-8drx7d57/overlay/lib/python3.6/site-packages/cairo/_cairo.cpython-36m-darwin.so, 0x0002): symbol not found in flat namespace '_cairo_append_path' ERROR: Failed building wheel for pygobject ERROR: Could not build wheels for pygobject, which is required to install pyproject.toml-based projects
可行解决方案
报错核心原因是环境混装:你现在用的是单独安装的Python 3.6加conda base环境,pip安装pycairo时拉取的预编译包和brew安装的cairo原生动态库不匹配,找不到对应函数符号才会编译失败。按以下步骤操作即可修复:
- 先清理所有之前安装的冲突包,避免残留文件干扰:
pip3 uninstall -y gobject pygobject pycairo brew uninstall --ignore-dependencies cairo py3cairo pygobject3 gtk+3
注意:PyPI上名为gobject的包是过时废弃项目,和正式的PyGObject不是同一个东西,后续不要安装这个包,否则会出现导入冲突
- 统一通过Homebrew安装所有原生依赖和对应Python绑定,不要单独用pip编译安装PyGObject相关组件:
brew install cairo gtk+3 pygobject3 py3cairo
- 将brew安装的Python包路径加入当前环境的Python搜索路径,解决找不到包的问题。从终端提示符判断你当前使用zsh + conda base环境,执行以下命令永久配置:
- Intel芯片Mac执行:
echo "export PYTHONPATH=/usr/local/lib/python3/site-packages:$PYTHONPATH" >> ~/.zshrc source ~/.zshrc- M系列(Apple Silicon)芯片Mac执行:
echo "export PYTHONPATH=/opt/homebrew/lib/python3/site-packages:$PYTHONPATH" >> ~/.zshrc source ~/.zshrc
如果执行后仍找不到gi模块,可以通过brew --prefix命令查询brew的实际安装路径,对应调整上面的PYTHONPATH值即可
- 执行之前的测试命令验证安装:
python3 -c 'import gi; gi.require_version("Gtk", "3.0"); print("ok")'
命令输出ok即代表安装成功。
内容的提问来源于stack exchange,提问作者Khalil Mebarkia
相关产品推荐
相关产品推荐

