Skip to main content
 首页 » 编程设计

带有 yum api 的 python之安装包

2025年05月04日9mayingbao

你好我正在使用以下代码通过 yum api 安装包,使用 pythongs cript 我需要基于此代码构建一些安装,现在它已安装但我收到一些错误

#!/usr/bin/python 
import sys 
import platform 
import urllib2, urllib 
import re 
import yum 
 
package="ntp" 
 
print ("Installing ntp") 
 
print ("#################") 
 
yb=yum.YumBase() 
searchlist=['name'] 
arg=['ntp'] 
matches = yb.searchGenerator(searchlist,arg) 
for (package, matched_value) in matches : 
    if package.name == 'ntp' : yb.install(package) 
    yb.buildTransaction() 
    yb.processTransaction() 

安装完成后出现错误

Running rpm_check_debug 
Traceback (most recent call last): 
  File "./test.py", line 29, in <module> 
    yb.processTransaction() 
  File "/usr/lib/python2.6/site-packages/yum/__init__.py", line 4928, in processTransaction 
    self._doTestTransaction(callback,display=rpmTestDisplay) 
  File "/usr/lib/python2.6/site-packages/yum/__init__.py", line 5027, in _doTestTransaction 
    raise Errors.YumTestTransactionError, errstring 
yum.Errors.YumTestTransactionError: Test Transaction Errors:   package ntp  is already installed 

即使我删除了 ntp 并再次运行脚本,它也会在完成安装后给我这个错误消息

另外我想调整安装过程,检查包是否已经安装然后打印它已经安装并处理到代码中的下一步,否则处理安装步骤, 对于使用 yum api 以正确方式进行 if 条件的任何提示

请您参考如下方法:

您好,之前的答案无效,正确的答案如下:

import yum 
 
yb=yum.YumBase() 
inst = yb.rpmdb.returnPackages() 
installed=[x.name for x in inst] 
packages=['bla1', 'bla2', 'bla3'] 
 
for package in packages: 
        if package in installed: 
                print('{0} is already installed'.format(package)) 
        else: 
                print('Installing {0}'.format(package)) 
                kwarg = { 
                        'name':package 
                } 
                yb.install(**kwarg) 
                yb.resolveDeps() 
                yb.buildTransaction() 
                yb.processTransaction()