2010-08-02 3 views
13

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

В Баш скрипт, я бы:

dpkg -s packagename | grep Status 

предложения, чтобы сделать то же самое в сценарии Python?

Спасибо,

ответ

1

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

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

3

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

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

Это не те пакеты, которые ищет OP. Пакеты Python и пакеты менеджера пакетов Debian (в основном) разные. Смотрите: http://en.wikipedia.org/wiki/Dpkg – Oli

+0

Ну, ОП задал вопрос, есть ли способ из сценария Python, поэтому я не думаю, что это был слишком большой скачок, чтобы думать, что он смотрит для способа обнаружения зависимости модуля Python. Тем не менее, точка зрения, я надеюсь, что я более правильно квалифицировал свой ответ. – PaulMcG

+2

Google отправил меня сюда в поисках этого ответа, поэтому он ценится. – noah

1

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

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." 
12

Это вещий путь:

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

Отличный ответ – jsj

+0

Вы получите ключевую ошибку в случае, если пакет не установлен. Есть еще один способ сделать это, чтобы поймать это и обеспечить более аккуратный вывод, если пакет не найден. Я отправлю это как комментарий к OP. – 2017-08-14 14:38:48

0

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

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

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

0

Это код, который даст вам аккуратный способ отображения, если пакет установлен или нет (без запуска грязного сообщения об ошибке на экране). Однако это работает только на 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) 
Смежные вопросы