2011-05-01 41 views
23

我使用debug toolbar Django的,並想將它添加到如果兩個條件均滿足工程:如何檢查是否Python模塊存在,並且可以導入

  • 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,我需要的,如果檢查/ 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', 

有沒有辦法做到這一點?

回答

40

您可以使用相同的邏輯你的函數裏面:

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

沒有性能損失該解決方案監守模塊都是進口的只有一次。

+0

難道你不能使用'__import __(module_name,fromlist = [module_name])'而不是'import debug_toolbar'? – 2011-05-01 11:03:45

+0

@Dan D .:這不等同於'從debug_toolbar導入debug_toolbar'嗎?但即使它有效,有什麼優勢? – 2011-05-01 12:34:11

+0

不,奇怪的是它和'import debug_toolbar'一樣;我已經測試了這個python 2.5.2;好處是你可以使用'module_exists(「some_other_module」)'。 – 2011-05-01 12:43:26

相關問題