【问题标题】:How to install a package using the python-apt API如何使用 python-apt API 安装包
【发布时间】:2013-07-06 10:04:57
【问题描述】:

在 Python 方面我还是个新手,因此我事先请求原谅 :)。也就是说,我正在尝试制作一个脚本来安装一些 Linux 软件包。首先,我尝试按照here 的说明使用 subopen。虽然这最终可以奏效,但我偶然发现了python-apt API,由于我不是忠实粉丝或重新发明轮子,我决定试一试。

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

apt_pkg.PackageManager.install("python")

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

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

谢谢!

【问题讨论】:

标签: python apt


【解决方案1】:

推荐使用来自python-apt Debian 软件包的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 前端安装软件包。

【讨论】:

  • 这正是我想要的!谢谢奥斯汀,你是明星:D
  • 您可能想在cache.update() 之后调用cache.open(),以便利用新的缓存。否则,将使用旧缓存,这可能会导致奇怪的错误。
  • 有什么方法可以捕获安装进度,然后在完成后执行其他操作?
猜你喜欢
  • 2015-02-20
  • 2017-04-29
  • 2020-03-24
  • 2015-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-31
相关资源
最近更新 更多