Ответ 1
Это питонический путь:
import apt
cache = apt.Cache()
if cache['package-name'].is_installed:
print "YES it installed"
else:
print "NO it NOT installed"
Есть ли элегантный и более похожий на Python способ проверить, установлен ли пакет на Debian?
В bash script я бы сделал:
dpkg -s packagename | grep Status
Предложения сделать то же самое в Python script?
Спасибо,
Это питонический путь:
import apt
cache = apt.Cache()
if cache['package-name'].is_installed:
print "YES it installed"
else:
print "NO it NOT installed"
Если вы проверяете наличие пакета, который устанавливает модуль Python, вы можете проверить это из зависимого Python script - попробуйте импортировать его и посмотреть, есть ли у вас исключение:
import sys
try:
import maybe
except ImportError:
print "Sorry, must install the maybe package to run this program."
sys.exit(1)
Посмотрите commands
. Это очень полезно для запуска файлов в командной строке и получения статуса.
В противном случае, я уверен, что есть некоторая библиотека, которая позволит вам взаимодействовать с apt. python-apt может работать, но это немного грубо. Просто захватить командную строку проще.
Несколько более приятная, надеюсь, идиоматическая версия вашего примера 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."
Мне понадобилось кросс-платформенное решение, поэтому я закончил использование which.
import subprocess
retval = subprocess.call(["which", "packagename"])
if retval != 0:
print("Packagename not installed!")
Несмотря на то, что это не так pythonic, как приведенные выше ответы, он работает на большинстве платформ.
Это какой-то код, который даст вам опрятный способ отображения, если пакет установлен или нет (без запуска грязного сообщения об ошибке на экране). Однако это работает только на 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)