Проверка доступности модуля программно в Python? - PullRequest
4 голосов
/ 11 апреля 2010

учитывая список имен модулей (например, mymods = ['numpy', 'scipy', ...]), как я могу проверить, доступны ли модули?

Я попробовал следующее, но это неверно:

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

спасибо.

Ответы [ 2 ]

9 голосов
/ 11 апреля 2010

Вы можете использовать и функцию __import__, как в ответе @ Vinay, и a 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)

это может быть значительно быстрее, если вы делаете только хотите проверить доступность, но не (пока) не загружать модули, особенно для модулей, для загрузки которых требуется некоторое время. Обратите внимание, однако, что этот второй подход только специально проверяет наличие модулей - он не проверяет наличие каких-либо дополнительных модулей, которые могут потребоваться (поскольку проверяемые модули пытаются * 1022) * другие модули при загрузке). В зависимости от ваших точных характеристик, это может быть плюс или минус! -)

3 голосов
/ 11 апреля 2010

Используйте функцию __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'>
>>>
...