2010-08-02 21 views
13

Esiste un modo elegante e più simile a Python per verificare se un pacchetto è installato su Debian?Controlla se un pacchetto è installato

In uno script bash, mi piacerebbe fare:

dpkg -s packagename | grep Status 

Suggerimenti per fare lo stesso in uno script Python?

Grazie,

risposta

1

Date un'occhiata al commands. È molto utile per eseguire cose sulla riga di comando e ottenere lo stato.

Altrimenti, sono sicuro che c'è qualche libreria che ti permetterà di interagire con apt. python-apt potrebbe funzionare ma è un po 'grezzo. Catturare semplicemente la linea di comando sembra più facile.

3

Se si sta verificando l'esistenza di un pacchetto che installa un modulo Python, è possibile verificare per questo dall'interno di uno script Python dipende - provare a importare e vedere se si ottiene un'eccezione:

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

Questi non sono i pacchetti che l'OP sta cercando. I pacchetti Python e i pacchetti del gestore pacchetti di Debian sono (in gran parte) cose diverse. Vedi: http://en.wikipedia.org/wiki/Dpkg – Oli

+0

Bene, l'OP ha chiesto se ci fosse un modo all'interno di uno script Python, quindi non penso che fosse un passo troppo lungo per pensare che stesse guardando per un modo per rilevare una dipendenza del modulo Python. Comunque, punto preso, spero di aver più correttamente qualificato la mia risposta. – PaulMcG

+2

Google mi ha inviato qui in cerca di questa risposta, quindi è apprezzato. – noah

1

un po 'più bello, la versione si spera idiomatica del vostro esempio 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." 
12

Questo è un modo divinatorio:

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

Ottima risposta – jsj

+0

Si otterrebbe un errore chiave nel caso di un pacchetto non installato. C'è un altro modo per farlo che potrebbe catturare questo e fornire un output più ordinato se il pacchetto non viene trovato. Lo posterò come commento all'OP. –

0

Avevo bisogno di una soluzione multipiattaforma compatibile, quindi ho finito per usare which.

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

Anche se non è così pignolo come le risposte sopra, funziona sulla maggior parte delle piattaforme.

0

Questo è un codice che offre un modo semplice di visualizzare se il pacchetto è installato o meno (senza attivare un messaggio di errore disordinato sullo schermo). Questo funziona solo in Python 3, però.

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

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

print(response) 
Problemi correlati