Проверьте, установлен ли пакет

Есть ли элегантный и более похожий на Python способ проверить, установлен ли пакет на Debian?

В bash script я бы сделал:

dpkg -s packagename | grep Status

Предложения сделать то же самое в Python script?

Спасибо,

Ответы

Ответ 1

Это питонический путь:

import apt
cache = apt.Cache()
if cache['package-name'].is_installed:
    print "YES it installed"
else:
    print "NO it NOT installed"

Ответ 2

Если вы проверяете наличие пакета, который устанавливает модуль Python, вы можете проверить это из зависимого Python script - попробуйте импортировать его и посмотреть, есть ли у вас исключение:

import sys
try:
    import maybe
except ImportError:
    print "Sorry, must install the maybe package to run this program."
    sys.exit(1)

Ответ 3

Посмотрите commands. Это очень полезно для запуска файлов в командной строке и получения статуса.

В противном случае, я уверен, что есть некоторая библиотека, которая позволит вам взаимодействовать с apt. python-apt может работать, но это немного грубо. Просто захватить командную строку проще.

Ответ 4

Несколько более приятная, надеюсь, идиоматическая версия вашего примера bash:

import os, subprocess
devnull = open(os.devnull,"w")
retval = subprocess.call(["dpkg","-s","coreutils"],stdout=devnull,stderr=subprocess.STDOUT)
devnull.close()
if retval != 0:
    print "Package coreutils not installed."

Ответ 5

Мне понадобилось кросс-платформенное решение, поэтому я закончил использование which.

import subprocess
retval = subprocess.call(["which", "packagename"])
if retval != 0:
    print("Packagename not installed!")

Несмотря на то, что это не так pythonic, как приведенные выше ответы, он работает на большинстве платформ.

Ответ 6

Это какой-то код, который даст вам опрятный способ отображения, если пакет установлен или нет (без запуска грязного сообщения об ошибке на экране). Однако это работает только на Python 3.

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

response = "Package Installed."
try:
    cache['notapkg'].is_installed
except KeyError:
    response = "Package Not Installed."

print(response)