如何比较 python 中的 Rpm 版本

2023-11-22

我试图找出如何比较 RPMS(当前安装)和(在本地存储库中可用)的 2 个列表,并查看哪些 RPMS 已过期。我一直在修改正则表达式,但是 RPMS 有很多不同的命名标准,我无法找到一个好的列表来使用。我的驱动器上没有实际的 RPMS,所以我无法执行 rpm -qif。

pattern1 = re.compile(r'^([a-zA-Z0-9_\-\+]*)-([a-zA-Z0-9_\.]*)-([a-zA-Z0-9_\.]*)\.(.*)')
for rpm in listOfRpms:
     packageInfo = pattern1.search(rpm[0]).groups()
     print packageInfo

这适用于绝大多数但不是全部 (2300 / 2400)

  yum-metadata-parser-1.1.2-2.el5
('yum-metadata-parser', '1.1.2', '2', 'el5') **What I need

但这些都不起作用,除非我破坏了其他一些以前起作用的东西。

  • wvdial-1.54.0-3
  • xdelta-1.1.3-20
  • xdelta-1.1.3-20_2
  • xmlsec1-1.2.6-3
  • xmlsec1-1.2.6-3_2
  • ypbind-1.17.2-13
  • ypbind-1.17.2-8
  • ypserv-2.13-14
  • zip-2.3-27
  • zlib-1.2.3-3
  • zlib-1.2.3-3_2
  • zsh-4.2.6-1

用转速术语来说,2.el5是释放场; 2 和 el5 不是单独的字段。然而,发布不需要有.正如你的例子所示。放下\.(.*)从最后一枪捕捉释放场。

现在您有了包名称、版本和发行版。比较它们的最简单方法是使用 rpm 的 python 模块:

import rpm
# t1 and t2 are tuples of (version, release)
def compare(t1, t2):
    v1, r1 = t1
    v2, r2 = t2
    return rpm.labelCompare(('1', v1, r1), ('1', v2, r2))

那额外的是什么'1', 你问?这是纪元,它优先于其他版本比较考虑因素。此外,它通常在文件名中不可用。在这里,出于本练习的目的,我们将其假装为“1”,但这可能根本不准确。如果您仅使用文件名,那么这是您的逻辑会出错的两个原因之一。

您的逻辑可能不同于的另一个原因rpmObsoletes字段,它允许将包升级为具有完全不同名称的包。如果您同意这些限制,请继续。

如果您没有rpm手头的 python 库,以下是比较每个发行版、版本和纪元的逻辑rpm 4.4.2.3:

  • 在每个字符串中搜索字母字段[a-zA-Z]+和数字字段[0-9]+被垃圾隔开[^a-zA-Z0-9]*.
  • 每个字符串中的连续字段会相互比较。
  • 字母部分按字典顺序比较,数字部分按数字进行比较。
  • 如果出现一个字段为数字字段而另一个字段为字母字段的不匹配情况,则数字字段始终被视为更大(较新)。
  • 在一个字符串用完字段的情况下,另一个字符串始终被认为更大(更新)。

See lib/rpmvercmp.c在 RPM 源中了解血淋淋的细节。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何比较 python 中的 Rpm 版本 的相关文章

  • 在 Python distutils 中从 setup.py 查找脚本目录的正确方法?

    我正在分发一个具有以下结构的包 mymodule mymodule init py mymodule code py scripts script1 py scripts script2 py The mymodule的子目录mymodul
  • 通过列表理解压平列表列表

    我正在尝试使用 python 中的列表理解来展平列表 我的清单有点像 1 2 3 4 5 6 7 8 只是为了打印这个列表列表中的单个项目 我编写了这个函数 def flat listoflist for item in listoflis
  • Argparse nargs="+" 正在吃位置参数

    这是我的解析器配置的一小部分 parser add argument infile help The file to be imported type argparse FileType r default sys stdin parser
  • Pandas 中允许重复列

    我将一个大的 CSV 包含股票财务数据 文件分割成更小的块 CSV 文件的格式不同 像 Excel 数据透视表之类的东西 第一列的前几行包含一些标题 公司名称 ID 等在以下列中重复 因为一家公司有多个属性 而不是一家公司只有一栏 在前几行
  • 填充两个函数之间的区域

    import matplotlib pyplot as plt import numpy as np def domain x np arange 0 10 0 001 f1 lambda x 2 x x 2 0 5 plt plot x
  • 如何创建一个语句来打印以特定单词开头的单词? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 如何在 python 中打印从特定字母开始的单词 而不使用函数 而是使用方法或循环 1 我有一个字符串 想要打印以 m 开头的单词 S
  • 切片 Dataframe 时出现 KeyError

    我的代码如下所示 d pd read csv Collector Output csv df pd DataFrame data d dfa df copy dfa dfa rename columns OBJECTID Object ID
  • python suds SOAP 请求中的名称空间前缀错误

    我使用 python suds 来实现客户端 并且在发送的 SOAP 标头中得到了错误的命名空间前缀 用于定义由element ref 在 wsdl 中 wsdl 正在引用数据类型 xsd 文件 请参见下文 问题出在函数上GetRecord
  • 对图像块进行多重处理

    我有一个函数必须循环遍历图像的各个像素并计算一些几何形状 此函数需要很长时间才能运行 在 24 兆像素图像上大约需要 5 小时 但似乎应该很容易在多个内核上并行运行 然而 我一生都找不到一个有据可查 解释充分的例子来使用 Multiproc
  • Numpy 过滤器平滑零区域

    我有一个 0 及更大整数的 2D numpy 数组 其中值代表区域标签 例如 array 9 9 9 0 0 0 0 1 1 1 9 9 9 9 0 7 1 1 1 1 9 9 9 9 0 2 2 1 1 1 9 9 9 8 0 2 2 1
  • 默认情况下,Keras 自定义层参数是不可训练的吗?

    我在 Keras 中构建了一个简单的自定义层 并惊讶地发现参数默认情况下未设置为可训练 我可以通过显式设置可训练属性来使其工作 我无法通过查看文档或代码来解释为什么会这样 这是应该的样子还是我做错了什么导致默认情况下参数不可训练 代码 im
  • 使用 PyTorch 分布式 NCCL 连接失败

    我正在尝试使用 torch distributed 将 PyTorch 张量从一台机器发送到另一台机器 dist init process group 函数正常工作 但是 dist broadcast 函数中出现连接失败 这是我在节点 0
  • 反向引用在 PHP 中不起作用

    最近我一直在研究 更多的是在实践中说实话 正则表达式 我注意到他的力量 我提出的这个要求 link https stackoverflow com questions 30380397 take the text up to a speci
  • Ubuntu 上的 Python 2.7

    我是 Python 新手 正在 Linux 机器 Ubuntu 10 10 上工作 它正在运行 python 2 6 但我想运行 2 7 因为它有我想使用的功能 有人敦促我不要安装 2 7 并将其设置为我的默认 python 我的问题是 如
  • 无法在前端使用 JavaScript Fetch API 将文件上传到 FastAPI 后端

    我正在尝试弄清楚如何将图像发送到我的 API 并验证生成的token那是在header的请求 到目前为止 这就是我所处的位置 app post endreProfilbilde async def endreProfilbilde requ
  • 您可以将操作直接应用于map/reduce/filter 中的参数吗?

    map and filter通常可以与列表理解互换 但是reduce并不那么容易被交换map and filter 此外 在某些情况下我仍然更喜欢函数语法 但是 当您需要对参数本身进行操作时 我发现自己正在经历语法体操 最终必须编写整个函数
  • 限制 django 应用程序模型中的单个记录?

    我想使用模型来保存 django 应用程序的系统设置 因此 我想限制该模型 使其只能有一条记录 极限怎么办 尝试这个 class MyModel models Model onefield models CharField The fiel
  • 在Python中按属性获取对象列表中的索引

    我有具有属性 id 的对象列表 我想找到具有特定 id 的对象的索引 我写了这样的东西 index 1 for i in range len my list if my list i id specific id index i break
  • Elastic Beanstalk 中的 enum34 问题

    我正在尝试在 Elastic Beanstalk 中设置 django 环境 当我尝试通过requirements txt 文件安装时 我遇到了python3 6 问题 File opt python run venv bin pip li
  • 您可以使用关键字参数而不提供默认值吗?

    我习惯于在 Python 中使用这样的函数 方法定义 def my function arg1 None arg2 default do stuff here 如果我不供应arg1 or arg2 那么默认值None or default

随机推荐

  • 为什么Javascript ===/== 字符串相等有时具有恒定时间复杂度,有时具有线性时间复杂度?

    在我发现常见 最新的 Javascript 实现正在使用 String Interning 来提高性能之后 常见的 JavaScript 实现是否使用字符串驻留 我想 对于字符串将得到常数 O 1 时间 所以我对这个问题给出了错误的答案 J
  • 在 Mathematica 中安全地设置“结构”

    像 Mathematica 中那样进行记录的问题已经在几个地方讨论过 例如Mathematica 中的结构数据类型 所有这些方法的问题在于 人们似乎失去了执行以下操作的能力 对每个参数进行特定的额外检查 就像当一个参数这样做时x Numer
  • 按日、月、年获取不同的 ISO 日期

    我想要为 MongoDB 中的所有文档对象获取一组不同的年份和月份 例如 如果文档有日期 2015 08 11 2015 08 11 2015 08 12 2015 09 14 2014 10 30 2014 10 30 2014 08 1
  • Gmail API 中的观看请求不起作用

    我正在尝试使用 python 发出监视请求 如谷歌API但它不起作用 request labelIds INBOX topicName projects myproject topics mytopic gmail users watch
  • 以编程方式使用备份数据库

    如何使用 bak 数据库备份文件 通过查询备份SQL 服务器 以编程方式 我希望我的应用程序将数据库备份到某个位置 我已经可以做到 并且我还希望它能够加载备份的数据库 bak 文件 我如何使用 C 来做到这一点 您需要首先确保您的开发盒上安
  • PowerShell 无法识别安装在同一脚本中的 AWS CLI

    我已经使用 powershell 脚本安装了 aws cli command Net ServicePointManager SecurityProtocol Net SecurityProtocolType Tls12 Invoke Ex
  • 计算存储数字所需位数的最快方法是什么

    我正在尝试优化一些位打包和拆包例程 为了进行打包 我需要计算存储整数值所需的位数 这是当前的代码 if n 1 return 32 if n 0 return 1 int r 0 while n r n gt gt 1 return r 不
  • 为什么 7zip 在制作 SFX 安装程序时忽略我的安装路径?

    目前 我正在使用以下配置使用 7zip 制作 SFX Install UTF 8 InstallPath C test GUIMode 2 RunProgram 7z465 exe InstallEnd 然后 我将 7z465 exe 打包
  • xhr.upload.onprogress 不起作用

    以下代码中的所有内容都将起作用 但它永远不会触发 xhr upload onprogress 事件 function var xhr submit click function var formData new FormData formD
  • 如何从句子中提取名词形容词对

    我希望从中提取名词形容词对sentence 所以 基本上我想要这样的东西 Mark sincere John sincere from nltk import word tokenize pos tag ne chunk sentence
  • 半可编辑文件(例如配置文件)和版本控制 - 最佳实践?

    因此 我今天通过签入配置文件来终止构建 它知道服务器在哪里 想想 SQL 服务器等 并且我一直在针对在我的机器上运行的服务器进行工作 通常 或者更确切地说 在其他情况下 我们会针对中央服务器运行 当然 日常构建没有找到 我的 服务器 因此出
  • 为 Lion 的用户界面恢复功能编码 NSViewController

    知道归档的最佳实践是什么吗 NSViewController在窗口内resume 用户界面保存 目的是什么 我尝试将其存档在窗口控制器中encodeRestorableStateWithCoder 方法只是为了发现视图控制器在以下情况下不会
  • iOS 上是否有相当于 Android ShowcaseView 的工具?

    Github上有一个Android项目 https github com amlcurran Showcaseview 根据自述文件 ShowcaseView 库旨在通过独特且有吸引力的覆盖层向用户突出显示和展示应用程序的特定部分 这个库非
  • 如何计算滚动条滑块的大小?

    我正在用 C 和 XNA 为我的游戏制作自己的自定义 UI 系统 但我在滚动条方面遇到了一个小问题 我不知道计算滚动条拇指大小的公式是什么 假设我有一个 200x200 像素的面板 以及 600x600 像素的图像 如何根据图像大小计算滚动
  • 算术运算期间的数据类型提升:-1 < (unsigned int) 1 == false

    main if 1 lt unsigned char 1 printf less than else printf NOT less than Prints less than 因为 unsigned char 1 被转换为 signed
  • 如何在 Swift 中创建独特的形状或 UIView

    我真的没有任何关于 Swift 绘图的知识 但我希望创建与正方形略有不同的应用程序背景的一部分 请参阅下图了解我正在尝试制作的内容 这个想法是 这将位于屏幕的顶部 只不过是一个背景 它会延伸到屏幕的一半 然后 我将在顶部添加图像等 我需要正
  • django table2 创建带有链接的额外列

    我试图在我的一个表中添加一个额外的列 这会将 url 添加到另一个页面 我的桌子 class ItemTable tables Table edit tables LinkColumn item edit args A pk class M
  • 复制构造函数还是 = 运算符?

    class Foo Foo f Foo g f 我的问题是 标有 的行中正在调用什么 它是默认的复制ctr还是 运算符吗 我的问题是 标有 的行中正在调用什么 它是默认的复制ctr还是 运算符吗 将调用复制构造函数 尽管 正在使用标志 这是
  • 什么会导致 python 模块被导入两次?

    据我了解 python 模块永远不会导入两次 即模块中的代码仅在第一次导入时执行 后续的 import 语句只是将模块添加到导入范围 我有一个名为 TiledConvC3D py 的模块 但它似乎被导入了多次 我使用 pdb 在该模块的代码
  • 如何比较 python 中的 Rpm 版本

    我试图找出如何比较 RPMS 当前安装 和 在本地存储库中可用 的 2 个列表 并查看哪些 RPMS 已过期 我一直在修改正则表达式 但是 RPMS 有很多不同的命名标准 我无法找到一个好的列表来使用 我的驱动器上没有实际的 RPMS 所以