Как получить список зависимостей Yum для пакета с помощью программы python. Здесь сам пакет представляет собой одно обновление пакета, доступное в CentOS 5.5.

Я пытаюсь написать программу на python, чтобы получить список зависимостей, доступных для пакета, с использованием python Yum API.

Ниже приведен мой код, получающий список зависимостей, похожий на «yum deplist chkconfig-1.3.49.3-2.el6». В результате получается список всех необходимых пакетов независимо от уже установленного списка в системе.

Но я пытаюсь написать оболочку, эквивалентную этой команде «yum update chkconfig-1.3.49.3-2.el6». Эта команда приводит к зависимостям, которые не установлены в системе и которые необходимы.

Ниже приведен код, который я пробовал до сих пор. И есть ли другой способ доступа к Python Yum API для удовлетворения наших потребностей. Это фактическая функция "customMethod". Другие команды "compare" и "listCompare" предназначены для сравнения оборотов в списке и для получения последних среди них.

    import sys, re
    import yum, rpm
    from yum import _
    sys.path.insert(0, '/usr/share/yum-cli')
    import output

    class YumFrame(yum.YumBase, output.YumOutput):
        def __init__(self):
            try:
                yum.YumBase.__init__(self)
                output.YumOutput.__init__(self)
            except Exception, e:
                raise e
            self.pattern1 = re.compile(r'^([a-zA-Z0-9_\-\+]*)-([a-zA-Z0-9_\.]*)-([a-zA-Z0-9_\.]*)')

        def compare(self, pkg1, pkg2):
            Info1 = self.pattern1.search(pkg1).groups()
            Info2 = self.pattern1.search(pkg2).groups()
            n1, v1, r1 = Info1
            n2, v2, r2 = Info2
            if n1 == n2:
                return rpm.labelCompare(('1', v1, r1), ('1', v2, r2))
            else:
                return 2

        def listCompare(self, input):
            latest = input[0]
            refinedList = []
            for index, item in enumerate(input):
                result = self.compare(item, latest)
                if result == 1:
                    latest = item
                elif result == 2:
                    refinedList.append(item)

            refinedList.append(latest)
            return refinedList

        def customMethod(self, package):
            pkgs = []
            completeList = []
            ematch, match, unmatch = self.pkgSack.matchPackageNames([package])
            for po in ematch + match:
                pkgs.append(po)
            print "Matched Object: " + str(pkgs)
            results = self.findDeps(pkgs)
            for value in results.itervalues():
                for packageObject in value.itervalues():
                    actualList = []
                    for item in packageObject:
                        completeList.append(item.name + "-" + item.ver + "-" + item.rel)
            completeList = self.listCompare(completeList)
            completeList = list(set(completeList))
            return completeList

    if __name__ == "__main__":
        yumObj = YumFrame()
        print yumObj.customMethod("chkconfig-1.3.49.3-2.el6")

Заранее спасибо,

М Рам


person Ram Murthy    schedule 11.02.2013    source источник
comment
Ваш скрипт работает, за исключением того, что в нем указан пакет Centos6, но в вашем вопросе указан Centos5.5.   -  person ZaSter    schedule 13.02.2013
comment
Ваш сценарий устанавливает actualList = [], но эта переменная никогда не используется.   -  person ZaSter    schedule 13.02.2013
comment
да, ZaSter, я пытался получить как для Cent OS 5.x, так и для 6.x (сосредоточенный на python-Yum API). Поэтому по ошибке я упомянул такой вопрос. И любые предложенные ответы будут ему полезны.   -  person Ram Murthy    schedule 14.02.2013
comment
Ваш сценарий устанавливает actualList = [], но эта переменная никогда не используется. Что он должен делать?   -  person ZaSter    schedule 27.02.2013


Ответы (1)


Я не эксперт в python, но в интерфейсе Yum CLI есть простой способ:

yum erase [package name]

Он покажет вам список зависимостей перед фактическим удалением.

Надеюсь, поможет

person Ivan    schedule 02.04.2015