使用 YUM python 模块版本 3.2.29 时清空'obsoletes'列表



我需要检索 Python 中将被 YUM 事务淘汰的软件包列表。在带有 Python 2.7.5 和 yum 模块 3.4.3 的 Centos 7 上,它可以直接工作:

>>> import yum
>>> yb = yum.YumBase()
>>> txl = yb.installLocal('initial_patch-1-2.noarch.rpm')
Loaded plugins: fastestmirror
Examining initial_patch-1-2.noarch.rpm: initial_patch-1-2.noarch
Marking initial_patch-1-2.noarch.rpm to be installed
>>> txl
[<TransactionMember : initial_patch.noarch 0:1-2 - u (0x1906e60)>]
>>> txl[0]
<TransactionMember : initial_patch.noarch 0:1-2 - u (0x1906e60)>
>>> txl[0].obsoletes
[<RPMInstalledPackage : lzo-2.06-6.el7_0.2.x86_64 (0x1901bd0)>]
>>> txl[0].obsoletes[0].pkgtup
('lzo', 'x86_64', '0', '2.06', '6.el7_0.2')

所以在这里我们看到 initial_patch-1-2.noarch.rpm 淘汰了 lzo 软件包(initial_patch用于测试目的)。然后我尝试在具有 Python 2.6 和 yum 模块 3.2.29 的目标机器上执行相同的代码,我得到这个:

>>> import yum
>>> yb = yum.YumBase()
>>> txl = yb.installLocal('initial_patch-1-2.noarch.rpm')
Examining initial_patch-1-2.noarch.rpm: initial_patch-1-2.noarch
Marking initial_patch-1-2.noarch.rpm to be installed
>>> txl
[<TransactionMember : initial_patch.noarch 0:1-2 - u (0x12f0ab8)>]
>>> txl[0].pkgtup
('initial_patch', 'noarch', '0', '1', '2')
>>> txl[0].obsoletes
[]

您可以在最后看到空的过时列表,尽管安装的 RPM 是相同的,并且两台机器都有 lzo 软件包。我没有选择在目标机器上升级 Python 或 YUM 的选项,因此我将不胜感激任何适当填写过时列表的想法。

">>> txl[0].outes"的行为似乎取决于是否实际上安装了要过时的任何软件包(尝试使用包含过时的类似包重现您的示例:)

此行为严格来说是您要求的"将过时的软件包列表",因为未安装的软件包不会过时。

您可以尝试提取可能的过时版本:使用 rpm-python API直接从包中。这相当于"rpm -qp --obsoletes foo*.rpm"

最新更新