web-dev-qa-db-fra.com

Comment vérifier si python module existe et peut être importé

J'utilise barre d'outils de débogage avec Django et souhaitez l'ajouter au projet si deux conditions sont vraies:

  • settings.DEBUG est True
  • le module est lui-même existant

Ce n'est pas difficile de faire le premier

# adding Django debug toolbar
if DEBUG:
    MIDDLEWARE_CLASSES += 'debug_toolbar.middleware.DebugToolbarMiddleware',
    INSTALLED_APPS += 'debug_toolbar',

Mais comment puis-je vérifier si le module existe?

J'ai trouvé cette solution:

try:
    import debug_toolbar
except ImportError:
    pass

Mais étant donné que l'importation se produit ailleurs à Django, j'ai besoin de la logique si/sinon pour vérifier si le module existe, donc je peux vérifier dans des paramètres.py

def module_exists(module_name):
    # ??????

# adding Django debug toolbar
if DEBUG and module_exists('debug_toolbar'):
    MIDDLEWARE_CLASSES += 'debug_toolbar.middleware.DebugToolbarMiddleware',
    INSTALLED_APPS += 'debug_toolbar',

Y a-t-il un moyen de le faire?

27
Silver Light

Vous pouvez utiliser la même logique à l'intérieur de votre fonction:

def module_exists(module_name):
    try:
        __import__(module_name)
    except ImportError:
        return False
    else:
        return True

Il n'y a pas de pénalité de performance à cette solution car les modules ne sont importés qu'une seule fois.

43
Sven Marnach