How to check if python module exists and can be imported

Question:

I am using debug toolbar with django and would like to add it to project if two conditions are true:

  • settings.DEBUG is True
  • module itself exists

It’s not hard to do the first one

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

But how do I check if module exists?

I have found this solution:

try:
    import debug_toolbar
except ImportError:
    pass

But since import happens somewhere else in django, I need if/else logic to check if module exists, so I can check it in settings.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',

Is there a way to do it?

Asked By: Silver Light

||

Answers:

You can use the same logic inside your function:

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

There is no performance penalty to this solution because modules are imported only once.

Answered By: Sven Marnach
Categories: questions Tags: , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.