【问题标题】:GLib.Error: Required gtk+ version 3.20, current version is 3.18 (7)GLib.Error: 需要 gtk+ 版本 3.20,当前版本是 3.18 (7)
【发布时间】:2022-02-21 18:53:38
【问题描述】:

我有一个用 Python2 编写的旧程序需要使用,但它与 Ubuntu Xenial 的依赖关系不兼容。

我必须手动获取这些才能让它运行:

libwebp6_0.6.1-2ubuntu0.18.04.1_amd64.deb
libwebpdemux2_0.6.1-2ubuntu0.18.04.1_amd64.deb
libwebpmux3_0.6.1-2ubuntu0.18.04.1_amd64.deb
python-pil_5.1.0-1ubuntu0.7_amd64.deb
python-gtk2_2.24.0-5.1ubuntu2_amd64.deb

当我运行它时,我得到了这个:

myprog.py:12: PyGIWarning: Gtk was imported without specifying a version first. Use gi.require_version('Gtk', '3.0') before import to ensure that the right version gets loaded.

紧随其后

GLib.Error: ... Required gtk+ version 3.20, current version is 3.18 (7)

使用gi.require_version('Gtk', '3.20') 会产生ValueError: Namespace Gtk not available for version 3.20

我认为 Xenial 上没有用于 Python2 的 GTK3。

我能找到的最新的python-gtk2 是安装的,来自Bionic。所以我在安装了一堆依赖之后编译了pybgobject3.20:

export GI_LIBS="-L/usr/lib/x86_64-linux-gnu -lglib-2.0"
export GI_CFLAGS="-I/usr/include/glib-2.0 -I/usr/include/glib-2.0/include"
export PYCAIRO_CFLAGS="-I/usr/include/pycairo"
export CPPFLAGS="-I/usr/include/gobject-introspection-1.0"
./configure --prefix=${MY_BASE}/build --enable-static --enable-shared --with-python=python2

并尝试使用LD_LIBRARY_PATH=${MY_BASE}/build python2 myprog.py 运行它,但遇到了同样的问题。我尝试了变化直到LD_LIBRARY_PATH=${MY_BASE}/build/lib/python2.7/site-packages,结果相同。

我是否编译了错误的包?我错过了什么?

这些是我目前安装的软件包:

$ apt list --installed|grep python|grep -v python3

WARNING: apt does not have a stable CLI interface. Use with caution in scripts.

dh-python/xenial-updates,xenial-updates,xenial-security,xenial-security,now 2.20151103ubuntu1.2 all [installed]
libpython-dev/xenial-updates,now 2.7.12-1~16.04 amd64 [installed,automatic]
libpython-stdlib/xenial-updates,now 2.7.12-1~16.04 amd64 [installed]
libpython2.7/xenial-updates,xenial-security,now 2.7.12-1ubuntu0~16.04.13 amd64 [installed]
libpython2.7-dev/xenial-updates,xenial-security,now 2.7.12-1ubuntu0~16.04.13 amd64 [installed]
libpython2.7-minimal/xenial-updates,xenial-security,now 2.7.12-1ubuntu0~16.04.13 amd64 [installed]
libpython2.7-stdlib/xenial-updates,xenial-security,now 2.7.12-1ubuntu0~16.04.13 amd64 [installed]
python/xenial-updates,now 2.7.12-1~16.04 amd64 [installed]
python-apt-common/xenial-updates,xenial-updates,xenial-security,xenial-security,now 1.1.0~beta1ubuntu0.16.04.11 all [installed]
python-cairo/xenial,now 1.8.8-2 amd64 [installed,automatic]
python-cairo-dev/xenial,xenial,now 1.8.8-2 all [installed]
python-cheetah/xenial,now 2.4.4-3.fakesyncbuild1 amd64 [installed,automatic]
python-configparser/xenial,xenial,now 3.3.0r2-2 all [installed]
python-dev/xenial-updates,now 2.7.12-1~16.04 amd64 [installed]
python-dialog/xenial,now 3.3.0-2 amd64 [installed]
python-gi/xenial,now 3.20.0-0ubuntu1 amd64 [installed,automatic]
python-gi-cairo/xenial,now 3.20.0-0ubuntu1 amd64 [installed]
python-gi-dev/xenial,now 3.20.0-0ubuntu1 amd64 [installed]
python-gobject/xenial,xenial,now 3.20.0-0ubuntu1 all [installed]
python-gobject-2/xenial,now 2.28.6-12ubuntu1 amd64 [installed,automatic]
python-gobject-2-dev/xenial,xenial,now 2.28.6-12ubuntu1 all [installed]
python-gobject-dev/xenial,xenial,now 3.20.0-0ubuntu1 all [installed]
python-gtk2/now 2.24.0-5.1ubuntu2 amd64 [installed,local]
python-libvirt/xenial-updates,now 1.3.1-1ubuntu1.1 amd64 [installed,automatic]
python-mako/xenial,xenial,now 1.0.3+ds1-1ubuntu1 all [installed,automatic]
python-markupsafe/xenial,now 0.23-2build2 amd64 [installed,automatic]
python-minimal/xenial-updates,now 2.7.12-1~16.04 amd64 [installed]
python-mysqldb/xenial,now 1.3.7-1build2 amd64 [installed]
python-pil/now 5.1.0-1ubuntu0.7 amd64 [installed,local]
python-pip/xenial-updates,xenial-updates,xenial-security,xenial-security,now 8.1.1-2ubuntu0.6 all [installed]
python-pip-whl/xenial-updates,xenial-updates,xenial-security,xenial-security,now 8.1.1-2ubuntu0.6 all [installed,automatic]
python-pkg-resources/xenial,xenial,now 20.7.0-1 all [installed,automatic]
python-pygments/xenial,xenial,now 2.1+dfsg-1 all [installed,automatic]
python-sqlalchemy/xenial,xenial,now 1.0.11+ds1-1ubuntu2 all [installed]
python-talloc/xenial,now 2.1.5-2 amd64 [installed]
python-vm-builder/xenial,xenial,now 0.12.4+bzr494-0ubuntu1 all [installed,automatic]
python-yaml/xenial,now 3.11-3build1 amd64 [installed,automatic]
python2.7/xenial-updates,xenial-security,now 2.7.12-1ubuntu0~16.04.13 amd64 [installed]
python2.7-dev/xenial-updates,xenial-security,now 2.7.12-1ubuntu0~16.04.13 amd64 [installed,automatic]
python2.7-minimal/xenial-updates,xenial-security,now 2.7.12-1ubuntu0~16.04.13 amd64 [installed]

还添加了这些:

libglade2-0_2.6.4-2_amd64.deb
python-glade2_2.24.0-5.1ubuntu2_amd64.deb

【问题讨论】:

  • 您可能只想将程序更新到 Python 3(但是,鉴于我不知道您的程序的大小,我不知道这有多可行)。这样一来,您就不必为不再维护的旧版本语言安装旧依赖项。
  • @SylvesterKruin 不是我想进入的兔子洞,真的。我不应该一开始就使用 Ubuntu 16.04...
  • 在我看来,基于旧的 SO pygtk 问题,Python 2 可能使用 PyGtk,而不是 Gtk2。你试过用那个吗?同样,我强烈建议您升级到 Python 3。这可能更容易。如果你想继续使用这个程序,从长远来看肯定会更好(抱歉响应慢,Firefox强迫我更新,我不得不重写评论)。
  • 它有import gi,所以我假设它使用PyGObject。我已经通过 msys 安装了 latest version 并将其 sys.path.appended 到主脚本中。
  • (之前的评论是关于 windows vm,我让应用程序在 xenial vm 上启动)

标签: python gtk ubuntu-16.04 python-2.x


【解决方案1】:

我已经让它在 Xenial 上运行,但应用程序无法正常运行:例如,文件、编辑……菜单选项不起作用。

从我不断增长的笔记中,我通过编译pygobject-3.20.1.tar.xz 来使用它

export GI_LIBS="-L/usr/lib/x86_64-linux-gnu -lglib-2.0"
export GI_CFLAGS="-I/usr/include/glib-2.0 -I/usr/include/glib-2.0/include"
export PYCAIRO_CFLAGS="-I/usr/include/pycairo"
export CPPFLAGS="-I/usr/include/gobject-introspection-1.0"
./configure --prefix=${PWD}/build/linux/x86_64 --enable-static --enable-shared --with-python=python2  

但我不确定这是我遵循的路径并且我在一个临时目录中。

无论如何,现在我在 windows vm 中遇到了同样的问题。

【讨论】:

    猜你喜欢
    • 2015-11-21
    • 2014-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-28
    • 2016-05-11
    • 2019-11-22
    相关资源
    最近更新 更多