2010-08-02 18 views
13

Czy istnieje elegancki i bardziej podobny do Pythona sposób sprawdzania, czy pakiet jest zainstalowany na Debianie?Sprawdź, czy pakiet jest zainstalowany.

w skrypcie bash, zrobiłbym:

dpkg -s packagename | grep Status 

sugestie, aby zrobić to samo w skrypt Pythona?

Dzięki,

Odpowiedz

1

Wystarczy popatrzeć na commands. Jest bardzo przydatny do uruchamiania rzeczy w wierszu poleceń i uzyskiwania statusu.

W przeciwnym razie jestem pewien, że istnieje jakaś biblioteka, która pozwoli ci na interakcję z apt. python-apt może działać, ale jest nieco surowy. Po prostu przechwytywanie wiersza poleceń wydaje się łatwiejsze.

3

Jeśli sprawdzanie istnienia pakietu, który instaluje moduł Pythona, można przetestować za to od wewnątrz utrzymaniu skrypt Pythona - spróbuj go importować i zobacz czy dostaniesz wyjątek:

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

Nie są to pakiety, których poszukuje OP. Pythonowe pakiety i pakiety menadżera pakietów Debiana są (w dużej mierze) różnymi rzeczami. Zobacz: http://en.wikipedia.org/wiki/Dpkg – Oli

+0

Cóż, OP zapytał, czy istnieje sposób z poziomu skryptu Python, więc nie sądzę, że był zbyt daleko, aby pomyśleć, że szukał dla sposobu wykrywania zależności modułu Pythona. Mimo wszystko, mam nadzieję, że poprawiłem odpowiedź. – PaulMcG

+2

Google wysłał mnie tutaj w poszukiwaniu tej odpowiedzi, więc jest to docenione. – noah

1

nieco ładniejszy, z nadzieją idiomatyczne wersję swojej bash przykład:

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

to jest pythonic sposób:

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

Świetna odpowiedź – jsj

+0

Otrzymasz kluczowy błąd w przypadku niezainstalowanego pakietu. Jest inny sposób, aby to złapać i zapewnić lepsze wyniki, jeśli pakiet nie zostanie znaleziony. Opublikuję to jako komentarz do OP. –

0

Potrzebowałem rozwiązania kompatybilnego z wieloma platformami, więc skończyłem używając which.

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

Chociaż nie jest tak pytoniczny jak powyższe odpowiedzi, działa na większości platform.

0

To jest kod, który dałby fajny sposób wyświetlenia, czy pakiet jest zainstalowany, czy nie (bez wywoływania niechlujnego komunikatu o błędzie na ekranie). Działa to jednak tylko w języku 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) 
Powiązane problemy