【问题标题】:Empty 'obsoletes' list when using YUM python module version 3.2.29使用 YUM python 模块版本 3.2.29 时为空的“过时”列表
【发布时间】: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 列表,我将不胜感激。

【问题讨论】:

    标签: python rpm yum


    【解决方案1】:

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

    这种行为完全是您要求的“将被淘汰的软件包列表”,因为未安装的软件包不会被淘汰。

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

    【讨论】:

    • 在这两种情况下,我都安装了 lzo 包。然而,不同的 YUM 版本给出了不同的输出。实际上,解决方法是使用 rpm,但作为 python 模块。这种方法的缺点是您必须检查是否安装了任何过时的软件包,这是一个额外的 yum 事务。
    猜你喜欢
    • 2014-01-21
    • 1970-01-01
    • 2021-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-17
    • 1970-01-01
    相关资源
    最近更新 更多