如何使用python apt API安装软件包

如何使用python apt API安装软件包,python,apt,Python,Apt,谈到Python,我是一个相当新手,因此我事先请求给予:)。也就是说,我正在尝试制作一个脚本,其中包括安装一些Linux软件包。首先,我试着按照解释使用Suboben。虽然这最终能起作用,但我偶然发现了这一点,因为我不是一个超级粉丝,也不是发明轮子的人,所以我决定尝试一下 当尝试查找有关使用python-apt安装软件包的示例/教程时,会出现问题。搜索文档时,我找到了一个类,该类有一些安装软件包的方法。我尝试了一些简单的代码来实现这一点: apt_pkg.PackageManager.insta

谈到Python,我是一个相当新手,因此我事先请求给予:)。也就是说,我正在尝试制作一个脚本,其中包括安装一些Linux软件包。首先,我试着按照解释使用Suboben。虽然这最终能起作用,但我偶然发现了这一点,因为我不是一个超级粉丝,也不是发明轮子的人,所以我决定尝试一下

当尝试查找有关使用python-apt安装软件包的示例/教程时,会出现问题。搜索文档时,我找到了一个类,该类有一些安装软件包的方法。我尝试了一些简单的代码来实现这一点:

apt_pkg.PackageManager.install("python")
这似乎并不容易,安装方法需要apt_pkg.PackageManager而不是普通字符串。因此,再看一点,这看起来很有希望,但我有点不愿意使用,因为我不太了解那里正在发生的一些事情

那么,有没有人尝试过使用pythonapt安装软件包,或者我应该使用普通的subopen风格


谢谢

建议使用
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前端安装软件包。

这正是我想要的!谢谢Austin,你是个明星:你可能想在
cache.update()
之后调用
cache.open()
,以便使用新的缓存。否则,将使用旧缓存,这可能会导致奇怪的错误。是否有任何方法可以捕获安装的进度,然后在安装完成后执行其他操作?python apt似乎已停止,大多数链接不再工作,根据pypi的说法,自年发布以来,该软件包还没有看到更新2012@DBX12我认为只是pypi包没有得到维护。Debian repos中有一个更新得多的版本。对于py2()或py3()(单独的软件包)。只需检查是否已安装: