給出了模塊名稱列表(例如mymods = ['numpy','scipy',...])如何檢查模塊是否可用?在Python中以編程方式檢查模塊可用性?
我嘗試以下,但它是不正確的:
for module_name in mymods:
try:
import module_name
except ImportError:
print "Module %s not found." %(module_name)
感謝。
給出了模塊名稱列表(例如mymods = ['numpy','scipy',...])如何檢查模塊是否可用?在Python中以編程方式檢查模塊可用性?
我嘗試以下,但它是不正確的:
for module_name in mymods:
try:
import module_name
except ImportError:
print "Module %s not found." %(module_name)
感謝。
你可以同時使用__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
其他模塊)。根據您的確切規格,這可能是一個加號或減號!)
使用__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'>
>>>
爲什麼它不正確? – wRAR 2010-04-11 16:23:30
@wRAR:因爲「os ='sys'; import os」試圖導入os,而不是sys。 – ojrac 2010-04-11 16:31:38
爲什麼你想檢查而不是隻導入模塊,並讓默認機制做它的事情? – 2010-04-11 16:49:52