Python >> Tutoriel Python >  >> Python

Comment comparer les versions de Rpm en Python ?

Formulation du problème : Comparer les versions RPM en Python

  • Étant donné deux listes de chaînes qui sont les versions RPM actuellement installées sur votre ordinateur et les versions dans un référentiel ou un autre environnement.
  • Comment comparer ces listes pour trouver les RPM obsolètes ?

Exemple  :Notre objectif est de déterminer une liste de packages qui ont une version plus récente différente.

Input:
rpm_1 = ["my_package-3.2.2.rpm",
          "your_package-3.1.1.rpm",
          "their_package-3.1.1.rpm",
          "her_package-3.1.1.rpm",
          "his_package-3.1.1.rpm",
          "its_package-3.1.1.rpm"]
 rpm_2 = ["my_package-9.2.2.rpm",
          "your_package-3.1.1.rpm",
          "her_package-3.1.1.rpm",
          "their_package-9.1.1.rpm"]

Output:
Stale package my_package3.2.2.rpm has new version:  9.2.2
Stale package their_package3.1.1.rpm has new version:  9.1.1

Contexte :RPM est un acronyme pour RedHat Package Manager et c'est un système de gestion de paquets open source gratuit pour Linux pour installer des paquets avec le suffixe de fichier .rpm . Un package RPM contient un nombre arbitraire de fichiers à extraire dans le système d'exploitation Linux. Il est utilisé pour de nombreuses distributions Linux modernes telles que Fedora, CentOS, OpenSUSE et Oracle Linux.

Solution :On résout le problème avec un simple dictionnaire versions qui suit les versions de chacun des anciens packages de rpm_1 et les compare avec les versions de la liste plus récente rpm_2 .

# RPM names assuming '-' indicates start of version number
rpm_1 = ["my_package-3.2.2.rpm",
         "your_package-3.1.1.rpm",
         "their_package-3.1.1.rpm",
         "her_package-3.1.1.rpm",
         "his_package-3.1.1.rpm",
         "its_package-3.1.1.rpm"]
rpm_2 = ["my_package-9.2.2.rpm",
         "your_package-3.1.1.rpm",
         "her_package-3.1.1.rpm",
         "their_package-9.1.1.rpm"]



def compare(rpm_1, rpm_2):
    versions = dict()
    for s in rpm_1:
        name, version = s.split('-')
        version = version[:-4]
        versions[name] = version

    for s in rpm_2:
        name, version = s.split('-')
        version = version[:-4]
        if name in versions and version != versions[name]:
            print('Stale package',
                  name + versions[name] + '.rpm',
                  'has new version: ', version)

compare(rpm_1, rpm_2)

Le résultat est la liste des packages dont le nom de version diffère par rapport à au moins un ancien nom de package :

Stale package my_package3.2.2.rpm has new version:  9.2.2
Stale package their_package3.1.1.rpm has new version:  9.1.1