如何基于指定版本GLib 2.76.6编译安装PyGObject?
PyGObject编译后导入
gi出现循环导入错误的解决方案 问题背景
我在Python项目中需要使用GLib 2.76.6版本,但当前PyGObject版本为2.71.3,于是手动从源码编译构建了适配GLib 2.76.6的PyGObject,安装后执行import gi时触发如下错误:
Python 3.10.12 (main, Jun 11 2023, 05:26:28) [GCC 11.4.0] on linux Type "help", "copyright", "credits" or "license" for more information. >>> import gi Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/opt/nvidia/deepstream/deepstream-6.4/pygobject-3.44.2/gi/__init__.py", line 40, in <module> from . import _gi ImportError: cannot import name '_gi' from partially initialized module 'gi' (most likely due to a circular import)
解决方法
调整Python路径优先级
系统默认的PyGObject可能会覆盖你编译的版本。先执行以下命令查看Python的路径顺序:python -c "import sys; print('\n'.join(sys.path))"如果系统自带的PyGObject路径排在
/opt/nvidia/deepstream/deepstream-6.4/pygobject-3.44.2前面,设置环境变量让Python优先加载编译后的目录:export PYTHONPATH=/opt/nvidia/deepstream/deepstream-6.4/pygobject-3.44.2:$PYTHONPATH之后再尝试导入
gi。验证编译产物完整性
检查/opt/nvidia/deepstream/deepstream-6.4/pygobject-3.44.2/gi目录下是否存在_gi.so(Linux平台的动态链接库文件)。如果没有,说明编译过程出错,重新执行编译步骤:- 清理编译残留:
make clean - 重新配置,明确指定GLib的安装路径:
注意把./configure --prefix=/opt/nvidia/deepstream/deepstream-6.4/pygobject-3.44.2 --with-glib=/path/to/glib-2.76.6/path/to/glib-2.76.6替换成你实际的GLib安装目录。 - 编译并安装:
make && make install
- 清理编译残留:
确认版本兼容性
检查PyGObject 3.44.2是否支持Python 3.10.12。如果版本不兼容,切换到官方标注支持的Python版本后重新编译。排查本地文件冲突
确保当前工作目录或项目目录下没有名为gi.py的文件,否则Python会优先加载这个本地文件,导致模块导入异常。
内容的提问来源于stack exchange,提问作者siretru
相关产品推荐
相关产品推荐

