编辑:我曾尝试导入代表了几乎所有的图书馆/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
)的系统版本,以防它以某种方式干扰.
我不知道还能做什么.有谁知道或不知道问题可能是什么?如果您对我可以尝试的内容有所了解或者我可以提供更多信息,请发表评论.
PyGObject具有关于Glib和Python的强大先决条件.
为了它的价值,我批量构建各种组合集以找到工作组合.
请注意,正如Simon Feltman在下面的评论中解释的那样,pycairo不是严格的依赖关系,可能会使用--enable-cairo=no
configure选项禁用.它只出现在这里,因为我使用默认构建选项执行了这些测试.
以下是我的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 ......