22

当谈到 Python 时,我是一个新手,因此我事先请求宽恕:)。也就是说,我正在尝试制作一个脚本来安装一些 Linux 软件包。首先,我尝试按照此处的说明使用 subopen 。虽然这最终可以工作,但我偶然发现了python-apt API,由于我不是一个大粉丝或重新发明轮子,我决定试一试。

尝试查找有关使用 python-apt 安装软件包的示例/教程时出现问题。搜索文档,我发现PackageManager类有一些安装包的方法。我尝试了一些简单的代码来让它工作:

apt_pkg.PackageManager.install("python")

这似乎并不那么容易,安装方法需要 apt_pkg.PackageManager 而不是纯字符串。因此,再看一点,我发现这个例子看起来很有希望,但我有点不愿意使用,因为我不太了解那里发生的一些事情。

那么,有没有人尝试使用 python-apt 安装软件包,或者我应该使用普通的 subopen 样式?

谢谢!

4

1 回答 1

45

建议使用Debian 软件包中的apt模块。python-apt这是围绕底层 C/C++libapt-xxx库的更高级别的包装器,并具有 Pythonic 接口。

这是一个将安装libjs-yui-doc软件包的示例脚本:

#!/usr/bin/env python
# aptinstall.py

import apt
import sys

pkg_name = "libjs-yui-doc"

cache = apt.cache.Cache()
cache.update()
cache.open()

pkg = cache[pkg_name]
if pkg.is_installed:
    print "{pkg_name} already installed".format(pkg_name=pkg_name)
else:
    pkg.mark_install()

    try:
        cache.commit()
    except Exception, arg:
        print >> sys.stderr, "Sorry, package installation failed [{err}]".format(err=str(arg))

与使用 一样apt-get,它必须以超级用户权限运行才能访问和修改 APT 缓存。

$ sudo ./aptinstall.py

如果您尝试将包安装作为较大脚本的一部分,最好只在所需的最短时间提升到 root 权限。

你可以在函数中找到一个小例子,/usr/share/pyshared/apt/progress/gtk2.py:_test()展示如何使用 GTK 前端安装包。

于 2013-07-09T00:16:36.237 回答