繁体   English   中英

在 Python 中以编程方式检查模块可用性?

[英]Checking for module availability programmatically in Python?

给定模块名称列表(例如 mymods = ['numpy', 'scipy', ...])如何检查模块是否可用?

我尝试了以下但不正确:

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

谢谢。

您可以同时使用__import__函数(如__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'>
>>>

如今,在提出问题 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_moduleimp.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 模块是否存在

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM