Skip to main content
 首页 » 编程设计

python之如何使用 python 程序获取包的 Yum 依赖项列表。这里的软件包本身是 CentOS 5.5 上可用的一个软件包更新

2025年05月04日14TianFang

我正在尝试编写一个 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”用于比较列表中的 rpm 并获取其中的最新版本。

    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") 

提前致谢

米拉姆

请您参考如下方法:

我不是 python 专家,但在 Yum CLI 界面中有一个简单的方法:

yum erase [package name] 

它会在实际删除之前显示一个依赖列表。

希望对你有帮助