【发布时间】:2015-01-29 07:48:36
【问题描述】:
我需要在 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 包,但您会在末尾看到空的 obsoletes 列表。我没有在目标机器上升级 Python 或 YUM 的选项,所以如果我有任何想法来适当地填写 obsoletes 列表,我将不胜感激。
【问题讨论】: