2010-04-11 35 views
4

給出了模塊名稱列表(例如mymods = ['numpy','scipy',...])如何檢查模塊是否可用?在Python中以編程方式檢查模塊可用性?

我嘗試以下,但它是不正確的:

for module_name in mymods: 
    try: 
    import module_name 
    except ImportError: 
    print "Module %s not found." %(module_name) 

感謝。

+3

爲什麼它不正確? – wRAR 2010-04-11 16:23:30

+1

@wRAR:因爲「os ='sys'; import os」試圖導入os,而不是sys。 – ojrac 2010-04-11 16:31:38

+0

爲什麼你想檢查而不是隻導入模塊,並讓默認機制做它的事情? – 2010-04-11 16:49:52

回答

9

你可以同時使用__import__功能,如@維奈的回答,一個try/except,如代碼:

for module_name in mymods: 
    try: 
    __import__(module_name) 
    except ImportError: 
    print "Module %s not found." %(module_name) 

另外,要只是檢查可用性,但沒有實際加載的模塊,你可以使用標準庫模塊imp

import imp 
for module_name in mymods: 
    try: 
    imp.find_module(module_name) 
    except ImportError: 
    print "Module %s not found." %(module_name) 

這可以大致更快,如果你只想檢查可用性,(還)沒有加載模塊,特別是對那些需要的模塊一會兒加載。但是,請注意,第二種方法僅專門檢查模塊是否存在 - 它不檢查可能需要的任何其他模塊的可用性(因爲被加載的模塊在加載時嘗試import其他模塊)。根據您的確切規格,這可能是一個加號或減號!)

3

使用__import__功能:

>>> for mname in ('sys', 'os', 're'): __import__(mname) 
... 
<module 'sys' (built-in)> 
<module 'os' from 'C:\Python\lib\os.pyc'> 
<module 're' from 'C:\Python\lib\re.pyc'> 
>>> 
相關問題