如何检查python模块是否存在并且可以导入

时间:2011-05-01 10:58:03

标签: python django python-import

我正在使用debug toolbar和django,如果有两个条件,我想将它添加到项目中:

  • settings.DEBUGTrue
  • 模块本身存在

第一个不难做到

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

但我如何检查模块是否存在?

我找到了这个解决方案:

try:
    import debug_toolbar
except ImportError:
    pass

但由于导入发生在django的其他地方,我需要if / else逻辑来检查模块是否存在,所以我可以在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',

有办法吗?

1 个答案:

答案 0 :(得分:43)

您可以在函数中使用相同的逻辑:

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

此解决方案没有性能损失,因为模块只导入一次。