Как установить пакет с помощью API-интерфейса python-apt

Я довольно новичок, когда дело доходит до Python, поэтому заранее прошу заранее. Тем не менее, я пытаюсь создать script, который, среди прочего, устанавливает некоторые пакеты Linux. Сначала я попытался использовать субопен, как описано здесь. Хотя это может в конечном итоге работать, я наткнулся на python-apt API, и поскольку я не большой поклонник или не изобретаю колесо, Я решил попробовать.

Проблема возникает при попытке найти примеры/учебные пособия по установке пакета с использованием python-apt. В поисках документации я нашел класс PackageManager, который имеет некоторые методы для установки пакета. Я попробовал простой код, чтобы заставить это работать:

apt_pkg.PackageManager.install("python")

Это не работает так легко, метод установки ожидает apt_pkg.PackageManager вместо простой строки. Таким образом, глядя немного больше, Я нашел этот пример, который выглядит многообещающим, но я немного неохотно использую, так как я не очень понять, что там происходит.

Затем кто-нибудь попытался установить пакет с помощью python-apt, или мне нужно использовать простой стиль прикопа?

Спасибо!

Ответ 1

Рекомендуется использовать модуль apt из пакета python-apt Debian. Это оболочка более высокого уровня вокруг базовых библиотек C/С++ libapt-xxx и имеет интерфейс Pythonic.

Вот пример script, который установит пакет libjs-yui-doc:

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

import apt
import sys

pkg_name = "libjs-yui-doc"

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

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

Если вы пытаетесь установить пакет как часть более крупного script, вероятно, неплохо было бы только повысить привилегии root до минимального требуемого времени.

Вы можете найти небольшой пример в функции /usr/share/pyshared/apt/progress/gtk2.py:_test(), показывающий, как установить пакет с помощью интерфейса GTK.