247 votes

Comment vérifier si un module python existe sans l'importer

J'ai besoin de savoir s'il existe un module python, sans l'importer.

Importer quelque chose qui pourrait ne pas exister (pas ce que je veux):

 try:
    import eggs
except ImportError:
    pass
 

277voto

yarbelk Points 992

Pour vérifier si l'importation peut trouver quelque chose, utilisez imp

 import imp
try:
    imp.find_module('eggs')
    found = True
except ImportError:
    found = False
 

EDIT: comme il a été mentionné, pour trouver des importations pointillées, vous devez faire plus:

 import imp
try:
    spam_info = imp.find_module('spam')
    spam = imp.load_module('spam', *spam_info)
    imp.find_module('eggs', spam.__path__) # __path__ is already a list
    found = True
except ImportError:
    found = False
 

13voto

Zulu Points 1471

Après avoir utilisé la réponse de yarbelk, j'ai créé ceci pour ne pas avoir à importer ìmp .

 try:
    __import__('imp').find_module('eggs')
    # Make things with supposed existing module
except ImportError:
    pass
 

Utile dans Django's settings.py par exemple.

5voto

ArtOfWarfare Points 2345

Utilisez l'une des fonctions de pkgutil, par exemple:

from pkgutil import iter_modules

def module_exists(module_name):
    return module_name in [tuple_[1] for tuple_ in iter_modules()]

Comme indiqué dans la documentation j'ai lié ci-dessus, iter_modules() rendements des tuples de la forme (module_loader, name, ispkg). Donc, nous ne se soucient que l'élément à l'index 1, donc l' tuple_[1] dans ma compréhension de liste.

Le nom de l' tuple_ a été choisi fondée sur la convention de nommage est proposé dans la PEP 8, à savoir que les variables dont les noms correspondent à celle d'un built-in devrait prendre fin en un seul trait de soulignement pour le distinguer de l' built-in.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X