为什么我的自建PyGObject段导入Gtk或Gdk?

 高淑美萱士建志 发布于 2023-02-06 01:56

编辑:我曾尝试导入代表了几乎所有的图书馆/usr/lib/girepository-1.0,通过gi.repository和他们所有除GTK和GDK工作.我更新了标题以反映这一点.


我需要一个自建的PyGObject库来配合我自己构建的Python 3.3.3.我使用了为PyGObject安装了所有依赖项sudo apt-get build-dep python3-gi.我发现工作系统PyGObject版本是3.2.2,所以我从Git repo检查了源版本3.2.2.我跑了:

autoreconf --force --install
./configure --prefix=/home/tomas/.pyenv/versions/3.3.3
make
make install

一切都编译和安装精美.我打开了一个新的CMD并将工作目录设置为~,然后:

~$ python
Python 3.3.3 (default, Dec 21 2013, 23:12:28) 
[GCC 4.6.3] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from gi.repository import Gtk
Segmentation fault (core dumped)
~$ 

我已LD_LIBRARY_PATH/home/tomas/.pyenv/versions/3.3.3/lib,并检查了正确的库被加载:

~$ ldd .pyenv/versions/3.3.3/lib/python3.3/site-packages/gi/_gi.so
    linux-vdso.so.1 =>  (0x00007fffcdf51000)
    libgirepository-1.0.so.1 => /usr/lib/libgirepository-1.0.so.1 (0x00007f45d8304000)
    libgobject-2.0.so.0 => /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0 (0x00007f45d80b5000)
    libglib-2.0.so.0 => /lib/x86_64-linux-gnu/libglib-2.0.so.0 (0x00007f45d7dbf000)
    libpyglib-gi-2.0-python.so.0 => /home/tomas/.pyenv/versions/3.3.3/lib/libpyglib-gi-2.0-python.so.0 (0x00007f45d7bba000)
    libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f45d799d000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f45d75dc000)
    libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f45d72e0000)
    libgmodule-2.0.so.0 => /usr/lib/x86_64-linux-gnu/libgmodule-2.0.so.0 (0x00007f45d70dc000)
    libgio-2.0.so.0 => /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0 (0x00007f45d6d8c000)
    libffi.so.6 => /usr/lib/x86_64-linux-gnu/libffi.so.6 (0x00007f45d6b84000)
    libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007f45d6947000)
    librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f45d673e000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f45d877b000)
    libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f45d653a000)
    libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f45d6323000)
    libselinux.so.1 => /lib/x86_64-linux-gnu/libselinux.so.1 (0x00007f45d6103000)
    libresolv.so.2 => /lib/x86_64-linux-gnu/libresolv.so.2 (0x00007f45d5ee7000)

我还导入了模块python -vv:Pastebin

最后几行显示核心转储在导入后立即发生gi.repository.Atk:

# trying /home/tomas/.pyenv/versions/3.3.3/lib/python3.3/site-packages/gi/repository/Atk.cpython-33m.so
# trying /home/tomas/.pyenv/versions/3.3.3/lib/python3.3/site-packages/gi/repository/Atk.abi3.so
# trying /home/tomas/.pyenv/versions/3.3.3/lib/python3.3/site-packages/gi/repository/Atk.so
# trying /home/tomas/.pyenv/versions/3.3.3/lib/python3.3/site-packages/gi/repository/Atk.py
# trying /home/tomas/.pyenv/versions/3.3.3/lib/python3.3/site-packages/gi/repository/Atk.pyc
# trying /home/tomas/.pyenv/versions/3.3.3/lib/python3.3/site-packages/gi/overrides/Atk.cpython-33m.so
# trying /home/tomas/.pyenv/versions/3.3.3/lib/python3.3/site-packages/gi/overrides/Atk.abi3.so
# trying /home/tomas/.pyenv/versions/3.3.3/lib/python3.3/site-packages/gi/overrides/Atk.so
# trying /home/tomas/.pyenv/versions/3.3.3/lib/python3.3/site-packages/gi/overrides/Atk.py
# trying /home/tomas/.pyenv/versions/3.3.3/lib/python3.3/site-packages/gi/overrides/Atk.pyc
import 'gi.repository.Atk' # 
Segmentation fault (core dumped)

导入只是gi.repository.Atk不是段错误.

我也尝试删除库(sudo dpkg -P python3-gi)的系统版本,以防它以某种方式干扰.


我不知道还能做什么.有谁知道或不知道问题可能是什么?如果您对我可以尝试的内容有所了解或者我可以提供更多信息,请发表评论.

1 个回答
  • PyGObject具有关于Glib和Python的强大先决条件.

    为了它的价值,我批量构建各种组合集以找到工作组合.

    请注意,正如Simon Feltman在下面的评论中解释的那样,pycairo不是严格的依赖关系,可能会使用--enable-cairo=noconfigure选项禁用.它只出现在这里,因为我使用默认构建选项执行了这些测试.

    以下是我的Debian Wheezy/Wheezy-backports系统(GLib 2.33)的结果:

    python      pygobject   pycairo     compile           ... import Gtk    
    
    3.1         3.0         1.0         NO (pycairo)                        
    3.1         3.0         1.10        YES               OK                
    3.1         3.0         1.2         NO (pycairo)                        
    3.1         3.0         1.4         NO (pycairo)                        
    3.1         3.0         1.6         NO (pycairo)                        
    3.1         3.0         1.8         NO (pycairo)                        
    3.1         3.2         1.0         NO (pycairo)                        
    3.1         3.2         1.10        YES               OK                
    3.1         3.2         1.2         NO (pycairo)                        
    3.1         3.2         1.4         NO (pycairo)                        
    3.1         3.2         1.6         NO (pycairo)                        
    3.1         3.2         1.8         NO (pycairo)                        
    3.1         3.4         1.0         NO (pycairo)                        
    3.1         3.4         1.10        NO (pygobject)                      
    3.1         3.4         1.2         NO (pycairo)                        
    3.1         3.4         1.4         NO (pycairo)                        
    3.1         3.4         1.6         NO (pycairo)                        
    3.1         3.4         1.8         NO (pycairo)                        
    3.1         3.6         1.0         NO (pycairo)                        
    3.1         3.6         1.10        NO (pycairo)                        
    3.1         3.6         1.2         NO (pycairo)                        
    3.1         3.6         1.4         NO (pycairo)                        
    3.1         3.6         1.6         NO (pycairo)                        
    3.1         3.6         1.8         NO (pycairo)                        
    3.1         3.8         1.0         NO (pycairo)                        
    3.1         3.8         1.10        NO (pygobject)                      
    3.1         3.8         1.2         NO (pycairo)                        
    3.1         3.8         1.4         NO (pycairo)                        
    3.1         3.8         1.6         NO (pycairo)                        
    3.1         3.8         1.8         NO (pycairo)                        
    3.2         3.0         1.0         NO (pycairo)                        
    3.2         3.0         1.10        YES               OK                
    3.2         3.0         1.2         NO (pycairo)                        
    3.2         3.0         1.4         NO (pycairo)                        
    3.2         3.0         1.6         NO (pycairo)                        
    3.2         3.0         1.8         NO (pycairo)                        
    3.2         3.2         1.0         NO (pycairo)                        
    3.2         3.2         1.10        YES               OK                
    3.2         3.2         1.2         NO (pycairo)                        
    3.2         3.2         1.4         NO (pycairo)                        
    3.2         3.2         1.6         NO (pycairo)                        
    3.2         3.2         1.8         NO (pycairo)                        
    3.2         3.4         1.0         NO (pycairo)                        
    3.2         3.4         1.10        NO (pygobject)                      
    3.2         3.4         1.2         NO (pycairo)                        
    3.2         3.4         1.4         NO (pycairo)                        
    3.2         3.4         1.6         NO (pycairo)                        
    3.2         3.4         1.8         NO (pycairo)                        
    3.2         3.6         1.0         NO (pycairo)                        
    3.2         3.6         1.10        NO (pycairo)                        
    3.2         3.6         1.2         NO (pycairo)                        
    3.2         3.6         1.4         NO (pycairo)                        
    3.2         3.6         1.6         NO (pycairo)                        
    3.2         3.6         1.8         NO (pycairo)                        
    3.2         3.8         1.0         NO (pycairo)                        
    3.2         3.8         1.10        NO (pygobject)                      
    3.2         3.8         1.2         NO (pycairo)                        
    3.2         3.8         1.4         NO (pycairo)                        
    3.2         3.8         1.6         NO (pycairo)                        
    3.2         3.8         1.8         NO (pycairo)                        
    3.3         3.0         1.0         NO (pycairo)                        
    3.3         3.0         1.10        YES               SEGMENTATION FAULT
    3.3         3.0         1.2         NO (pycairo)                        
    3.3         3.0         1.4         NO (pycairo)                        
    3.3         3.0         1.6         NO (pycairo)                        
    3.3         3.0         1.8         NO (pycairo)                        
    3.3         3.2         1.0         NO (pycairo)                        
    3.3         3.2         1.10        YES               SEGMENTATION FAULT
    3.3         3.2         1.2         NO (pycairo)                        
    3.3         3.2         1.4         NO (pycairo)                        
    3.3         3.2         1.6         NO (pycairo)                        
    3.3         3.2         1.8         NO (pycairo)                        
    3.3         3.4         1.0         NO (pycairo)                        
    3.3         3.4         1.10        NO (pygobject)                      
    3.3         3.4         1.2         NO (pycairo)                        
    3.3         3.4         1.4         NO (pycairo)                        
    3.3         3.4         1.6         NO (pycairo)                        
    3.3         3.4         1.8         NO (pycairo)                        
    3.3         3.6         1.0         NO (pycairo)                        
    3.3         3.6         1.10        NO (pycairo)                        
    3.3         3.6         1.2         NO (pycairo)                        
    3.3         3.6         1.4         NO (pycairo)                        
    3.3         3.6         1.6         NO (pycairo)                        
    3.3         3.6         1.8         NO (pycairo)                        
    3.3         3.8         1.0         NO (pycairo)                        
    3.3         3.8         1.10        NO (pygobject)                      
    3.3         3.8         1.2         NO (pycairo)                        
    3.3         3.8         1.4         NO (pycairo)                        
    3.3         3.8         1.6         NO (pycairo)                        
    3.3         3.8         1.8         NO (pycairo)   
    

    许多组合不会构建,因为它们需要比我的系统上可用的更新版本的GLib.在某些情况下,setup.py脚本需要python-2,因此安装过程在仅限python-3的环境中失败.我没有花时间去理解为什么某些组合会在运行时导致分段错误.

    正如你所看到的,你最好的选择(至少今天在Debian上)是建立pycairo-1.10 + pygobject-3.2 + python 3.2.任何更新的东西都需要至少更新版的GLib ......

    2023-02-06 02:25 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有