使用 Python 与 CentOS 上的 YUM 交互
YUM 是一个用于处理软件包的实用程序,由 Fedora 和 CentOS 等多个知名操作系统使用。 YUM 简化了 CVM 实例上的软件安装,让程序的下载和安装变得简单,省时省力。 YUM 可以自动确定、获取和安装所有可用的依赖包,因为它会在更新、添加或删除包时自动解决依赖关系。我们将在本文中详细了解在 CentOS 系统上使用 Python 的 YUM。
示例1:在CentOS中使用Python更新YUM模块
众所周知,YUM 是一个命令行工具,用户可以在检查更新后自动安装和下载更新的 RPM 包。
import os
cmd = "yum update"
os.system(cmd)
这里,我们使用Python文件更新YUM,以检查YUM模块是否在系统内更新或需要更新。给出了Python脚本,其中使用YUM进行更新。我们导入“os”模块来与CentOS操作系统交互。然后,我们使用“cmd”来解释分配给它的语句。我们分配一个命令来更新 YUM。
该脚本保存在此处的“script.py”文件中。当我们执行这个Python文件时,它开始更新YUM。输出打印的语句指出“没有标记为更新的软件包”,因为 YUM 已在 CentOS 中更新。
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: mirror.dc.uz
* extras: mirror.dc.uz
* updates: mirror.dc.uz
No packages marked for update
示例2:在CentOS中使用Python检查YUM配置
之前的做法是通过与CentOS交互,使用Python脚本来更新YUM包。现在,必须导入“yum”Python 包才能开始在 CentOS 操作系统中预安装的 YUM 进行编程。在本例中,YUM 用于检查 YUM 配置。
import os
import sys
import yum
yb = yum.YumBase()
print "****yum config file****"
print yb.conf.config_file_path
print "****logfile path****"
print yb.conf.logfile
print "****repos directories and files****"
for i in yb.conf.reposdir : print i
print "****skip-broken parameter****"
print yb.conf.skip_broken
print "****set the level of errors****"
print yb.conf.errorlevel
先前的源代码与“yum”模块以及其他所需模块一起导入。之后,我们创建“yb”变量,其中部署了“yum”模块的 yumBase() 基类。我们在每个示例脚本中都使用这行代码,因为 YumBase 是根类,其中包含使用 YUM 执行所有包管理操作所需的方法和对象。
给出打印语句来检查 YUM 的配置。首先,我们有一个打印语句,显示 YUM 配置文件的路径。然后,我们使用“yb”变量设置logFile的打印命令来获取YUM的日志文件路径。之后,我们使用“reposdir”命令输出存储库的目录和文件。然后,我们有一个带有skip-broken参数的YUM命令,当没有为其指定布尔值时,它默认返回false。当为 yumBase 配置命令指定 Skip-broken 参数为真值时,它使 YUM 能够自动从更新中排除损坏的软件包,而无需用户输入。 YUM 配置的最后一个命令是“errorlevel”,用于设置错误级别。它的值范围从 0 到 10,其中 0 仅重要,10 包括调试。
YUM配置在终端上打印YUM的配置文件。我们还获取 YUM 配置的 logFile 路径。与此同时,YUM 存储库的目录和文件也会显示。然后,我们从skip-broken命令中获取错误值,因为没有为此设置值。错误结果的级别也生成为“2”。
****yum config file****
Loaded plugins: fastestmirror, langpacks
/etc/yum.conf
****logfile path****
/var/log/yum.log
****repos directories and files****
/etc/yum/repos.d
/etc/yum.repos.d
****skip-broken parameter****
False
****set the level of errors****
2
示例 3:在 CentOS 中使用 Python 从 YUM 存储库搜索包
在本例中,YUM 用于查找和打印指定包的 YUM 存储库。我们使用以下 YUM 包的 yumBase 类的一些不同方法:
import sys
import yum
yb = yum.YumBase()
yb.setCacheDir()
results = yb.pkgSack.returnNewestByNameArch(patterns=["python", "php"])
for pkg in results:
print "%s %s (%s) \n\t%s" % (pkg.name, pkg.version, pkg.arch, pkg.summary)
在前面的 Python 脚本中部署 YUM 模块后,我们插入 yum.YumBase() 行来开始代码。然后,我们定义 yumBase 的 setCacheDir() 命令来建立一个新的 Yum 缓存目录,以普通用户和 root 用户的身份执行所有操作。脚本的下一行是用“results”变量定义的,其中我们使用 yumBase,通过“pkgScak”命令调用它来在所有可访问的存储库上运行查询。之后,我们使用YUM的“pkhScak”属性的“returnNewstByNameArch”函数。 returnNewstByNameArch() 方法检索与“python”或“PHP”模式字符串匹配的包对象。
与“python”和“PHP”包相关的信息由YUM模块打印在CentOS终端上。
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: mirror.dc.uz
* extras: mirror.dc.uz
* updates: mirror.dc.uz
python 2.7.5 (x86_64)
An interpreted, interactive, object-oriented programming language
php 5.4.16 (x86_64)
PHP scripting language for creating dynamic web sites
示例4:在CentOS中使用Python通过YUM方式安装包
使用 YUM 安装软件包需要设置并完成事务。 YUM模块的YumBase类提供了使用Python在CentOS中安装软件包的方法。
import sys
import yum
yb = yum.YumBase()
yb.install(name='php')
yb.resolveDeps()
yb.processTransaction()
在前面的 Python 脚本中导入 YUM 模块后,我们将 yumBase() 类部署在“yb”变量中。然后,我们使用 yb.install 命令来简单地安装指定的包。 yb.install() 方法将“name”作为参数,我们为其分配“php”包名称来设置事务。之后,为了启动依赖关系的解析,调用“yb.resolveDeps()”方法。接下来,processTransaction() 方法触发“php”包的安装。
在输出中我们可以看到,通过与YUM方法交互,PHP包已成功安装在CentOS操作系统中。
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: mirror.dc.uz
* extras: mirror.dc.uz
* updates: mirror.dc.uz
Package php-5.4.16-48.el7.x86_64 already installed and latest version
Running Transaction Check
示例5:在CentOS中使用Python通过YUM方法在给定位置设置存储库
YUM 可以配置为在任何位置检索存储库。它期望接受包含存储库 url 的命令行参数。
import sys
import yum
url = sys.argv[1]
yb = yum.YumBase()
if not yb.setCacheDir(force=True, reuse=False): print >>sys.stderr, "enable to create a tmp. cachedir. "
sys.exit(1)
yb.repos.disableRepo('*')
yb.add_enable_repo('NewRepos', [url])
在这里,我们使用 yb.repos.disableRepo(‘*’) 方法,当我们在其中给出星号符号时,它会禁用所有存储库。之后,我们调用 yb.add_enable_repo() 方法来启用设置了 url 的给定存储库。
前面的 Python 脚本在与 YUM 交互时,将给定存储库设置在 CentOS 上的特定位置,从而生成以下结果:
Loaded plugins: fastestmirror, langpacks
结论
本指南探讨了使用 YUM 包的 Python API 的方法。我们只需从 Python 脚本运行 um 命令来更新操作。然后,我们利用YUM包在CentOS中配置YUM。此外,使用YUM模块查询具体的包。接下来我们演示了使用YUM安装方式来安装包的方式。同样,我们也可以使用 yb.remove() 方法卸载该包。最后,我们通过与Python中的YUM模块交互来将存储库设置在该位置。