Проблема разработки: Сравнить RPM версии в Python
- Учитывая два списка строк, которые являются версиями RPM, установленные в данный момент на вашем компьютере и версиях в репозитории или другой среде.
- Как сравнить эти списки, чтобы найти RPMS, устаревшие?
Пример : Наша цель – определить список пакетов, которые имеют другую более новую версию.
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
Фон : RPM Это аббревиатура для Redhat Package Manager, и это бесплатная система управления пакетами с открытым исходным кодом для Linux для установки пакетов с помощью файлового суффикса .rpm
Отказ Пакет RPM содержит произвольное количество файлов, которые необходимо извлечь в операционную систему Linux. Он используется для многих современных дистрибутивов Linux, таких как Fedora, CentOS, OpenSUSE и Oracle Linux.
Решение : Мы решаем проблему простым Словарь Версии
Это отслеживает версию каждого из старых пакетов из RPM_1
и сравнивает их с версиями в новее Список 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)
Выходной вывод – это список пакетов, которые отличаются от имени версии по сравнению с по меньшей мере на одной старой имени пакета:
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
Работая в качестве исследователя в распределенных системах, доктор Кристиан Майер нашел свою любовь к учению студентов компьютерных наук.
Чтобы помочь студентам достичь более высоких уровней успеха Python, он основал сайт программирования образования Finxter.com Отказ Он автор популярной книги программирования Python One-listers (Nostarch 2020), Coauthor of Кофе-брейк Python Серия самооставленных книг, энтузиаста компьютерных наук, Фрилансера и владелец одного из лучших 10 крупнейших Питон блоги по всему миру.
Его страсти пишут, чтение и кодирование. Но его величайшая страсть состоит в том, чтобы служить стремлению кодер через Finxter и помогать им повысить свои навыки. Вы можете присоединиться к его бесплатной академии электронной почты здесь.