我需要检索将在Python中被YUM事务废弃的包列表。在Centos 7上使用Python 2.7.5和yum模块3.4.3,它可以直接使用:
>>> 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用于测试目的)。然后我试图在目标机器上执行相同的代码,其中包含带有yum模块3.2.29的Python 2.6,我得到了这个代码:
>>> 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的选项,所以我很感激任何填充过时列表的想法。
答案 0 :(得分:0)
&#34;&gt;&gt;&gt;的行为TXL [0] .obsoletes&#34;似乎取决于是否 实际上安装了任何要废弃的包(尝试 使用包含Obsoletes的类似包重现您的示例:)
此行为严格按照您的要求提供&#34;将被淘汰的软件包列表&#34;因为未安装的软件包不会被废弃。
您可以尝试使用rpm-python API提取可能的Obsoletes: 直接来自包裹。这相当于&#34; rpm -qp --obsoletes foo * .rpm&#34;