5

モジュール名のリスト(例:mymods = ['numpy'、'scipy'、...])が与えられた場合、モジュールが使用可能かどうかを確認するにはどうすればよいですか?

私は以下を試しましたが、それは正しくありません:

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

ありがとう。

4

3 に答える 3

10

__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、ロード時に他のモジュールを試行するため)。正確な仕様に応じて、これはプラスまたはマイナスになる可能性があります!-)

于 2010-04-11T16:30:16.247 に答える
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'>
>>>
于 2010-04-11T16:24:25.560 に答える
0

質問から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モジュールをインポートせずに存在するかどうかを確認する方法も確認してください。

于 2021-04-24T19:27:28.660 に答える