モジュール名のリスト(例:mymods = ['numpy'、'scipy'、...])が与えられた場合、モジュールが使用可能かどうかを確認するにはどうすればよいですか?
私は以下を試しましたが、それは正しくありません:
for module_name in mymods:
try:
import module_name
except ImportError:
print "Module %s not found." %(module_name)
ありがとう。
モジュール名のリスト(例:mymods = ['numpy'、'scipy'、...])が与えられた場合、モジュールが使用可能かどうかを確認するにはどうすればよいですか?
私は以下を試しましたが、それは正しくありません:
for module_name in mymods:
try:
import module_name
except ImportError:
print "Module %s not found." %(module_name)
ありがとう。
__import__@Vinayの回答のように関数と、コードのように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)
モジュールを(まだ)ロードせずに、可用性を確認するだけの場合、特にロードに時間がかかるモジュールの場合、これは大幅に高速になる可能性があります。ただし、この2番目のアプローチは、モジュールが存在することを具体的にチェックするだけであり、必要になる可能性のある他のモジュールの可用性はチェックしません(チェックされるモジュールは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'>
>>>
質問から10年以上経った現在、Python> = 3.4では、次の方法を使用していimportlib.util.find_specます。
import importlib
spec = importlib.util.find_spec('path.to.module')
if spam:
print('module can be imported')
このメカニズムは、それらよりも優先されimp.find_moduleます。
import importlib.util
import sys
# this is optional set that if you what load from specific directory
moduledir="d:\\dirtest"
```python
try:
spec = importlib.util.find_spec('path.to.module', moduledir)
if spec is None:
print("Import error 0: " + " module not found")
sys.exit(0)
toolbox = spec.loader.load_module()
except (ValueError, ImportError) as msg:
print("Import error 3: "+str(msg))
sys.exit(0)
print("load module")
古いPythonバージョンの場合は、Pythonモジュールをインポートせずに存在するかどうかを確認する方法も確認してください。