2010-08-02 17 views
13

¿Existe una forma elegante y más parecida a Python para comprobar si un paquete está instalado en Debian?Comprueba si hay un paquete instalado

En una escritura del golpe, lo haría:

dpkg -s packagename | grep Status 

Sugerencias para hacer lo mismo en un script en Python?

Gracias,

Respuesta

1

Eche un vistazo a commands. Es muy útil para ejecutar cosas en la línea de comandos y obtener el estado.

De lo contrario, estoy seguro de que hay alguna biblioteca que le permitirá interactuar con apt. python-apt podría funcionar pero es un poco crudo. Simplemente capturar la línea de comando parece más fácil.

3

Si usted está mirando para la existencia de un paquete que se instala un módulo de Python, puede probar esto en un script de Python dependientes - tratar de importar y ver si le da una excepción:

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

Estos no son los paquetes que OP está buscando. Los paquetes de Python y los paquetes del administrador de paquetes de Debian son (en gran parte) cosas diferentes. Ver: http://en.wikipedia.org/wiki/Dpkg – Oli

+0

Bueno, el OP sí me preguntó si había una manera desde dentro de un script de Python, así que no creo que fuera demasiado lejos para pensar que estaba buscando para una forma de detectar una dependencia de módulo Python. Aún así, punto tomado, espero haber calificado más adecuadamente mi respuesta. – PaulMcG

+2

Google me envió aquí en busca de esta respuesta, por lo que se agradece. – noah

1

un poco mejor, con suerte versión idiomática de su fiesta de ejemplo:

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

Ésta es una manera Pythonic:

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

Gran respuesta – jsj

+0

Se obtendría un error clave en el caso de un paquete no instalado. Hay otra forma de hacerlo que captaría esto y proporcionaría una salida más ordenada si no se encuentra el paquete. Lo publicaré como un comentario para el OP. –

0

Necesitaba una solución compatible multiplataforma, así que terminé usando which.

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

Aunque no es tan pitónico como las respuestas anteriores, funciona en la mayoría de las plataformas.

0

Este es un código que le daría una forma clara de mostrar si el paquete está instalado o no (sin activar un mensaje de error desordenado en la pantalla). Sin embargo, esto solo funciona en 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) 
Cuestiones relacionadas