2011-05-01 15 views
23

Tôi đang sử dụng debug toolbar với django và muốn thêm nó vào dự án nếu hai điều kiện là đúng:Làm thế nào để kiểm tra xem mô-đun python tồn tại và có thể được nhập khẩu

  • settings.DEBUGTrue
  • module chính nó tồn tại

Nó không khó để thực hiện đầu tiên một

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

Nhưng làm cách nào để kiểm tra xem mô-đun có tồn tại không?

Tôi đã tìm thấy giải pháp này:

try: 
    import debug_toolbar 
except ImportError: 
    pass 

Nhưng kể từ khi nhập khẩu sẽ xảy ra ở một nơi khác trong django, tôi cần if/else logic để kiểm tra xem mô-đun tồn tại, vì vậy tôi có thể kiểm tra nó trong 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', 

Có cách nào để làm điều đó không?

Trả lời

40

Bạn có thể sử dụng cùng một logic bên trong hàm của bạn:

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

Không có hình phạt hiệu quả để giải pháp này bởi vì các module được nhập khẩu chỉ một lần.

+0

Bạn không thể sử dụng '__import __ (module_name, fromlist = [module_name])' thay vì 'import debug_toolbar'? –

+0

@Dan D .: Sẽ không tương đương với 'từ debug_toolbar import debug_toolbar'? Nhưng ngay cả khi nó hoạt động, lợi thế là gì? –

+0

không, kỳ lạ nó giống như 'import debug_toolbar'; Tôi đã thử nghiệm điều này trên trăn 2.5.2; lợi thế là bạn có thể sử dụng 'module_exists (" some_other_module ")'. –

Các vấn đề liên quan