尝试导入

(函数来自 pyomo.common.dependencies)

pyomo.common.dependencies.attempt_import(name, error_message=None, only_catch_importerror=None, minimum_version=None, alt_names=None, callback=None, importer=None, defer_check=None, defer_import=None, deferred_submodules=None, catch_exceptions=None)[source]

尝试导入指定的模块。

这将尝试导入指定的模块,返回一个 (module, available) 元组。如果导入成功,module 将是导入的模块,available 将为 True。如果 导入导致异常,则 module 将是 ModuleUnavailable 的实例,available 将为 False

以下

>>> from pyomo.common.dependencies import attempt_import
>>> numpy, numpy_available = attempt_import('numpy')

大致相当于

>>> from pyomo.common.dependencies import ModuleUnavailable
>>> try:
...     import numpy
...     numpy_available = True
... except ImportError as e:
...     numpy = ModuleUnavailable('numpy', 'Numpy is not available',
...                               '', str(e), globals()['__name__'])
...     numpy_available = False

导入可以“延迟”到代码首次尝试访问模块或检查可用标志的布尔值为止。这允许在模块范围内声明可选依赖项,但在模块实际使用它们之前不会导入(从而加快初始包的导入速度)。延迟导入由两个辅助类处理(DeferredImportModuleDeferredImportIndicator)。在实际导入时,DeferredImportIndicator.resolve() 尝试用导入的模块和布尔标志替换这些对象(在本地和原始全局命名空间中),以便后续使用模块时不会因延迟导入而产生任何开销。

Parameters:
  • name (str) – 要导入的模块的名称

  • error_message (str, optional) – 由ModuleUnavailable引发的异常的消息

  • only_catch_importerror (bool, optional) –

    已弃用:请使用 catch_exceptions 代替 only_catch_importerror

    如果为 True(默认值),在模块导入期间引发的除 ImportError 之外的异常将被重新抛出。如果为 False,任何异常都将导致返回一个 ModuleUnavailable 对象。 (在版本 5.7.3 中已弃用)

  • minimum_version (str, optional) – 可接受的最低模块版本(从 module.__version__ 获取)

  • alt_names (list, optional) –

    已弃用:alt_names 不再需要指定,并且会被忽略。

    一个常见的替代名称列表,用于在 globals() 命名空间中查找此模块。例如,NumPy 的 alt_names 可能是 ['np']。(在版本 6.0 中已弃用)

  • callback (Callable[[ModuleType, bool], None], optional) – 一个具有签名 fcn(module, available) 的函数,该函数将在首次尝试导入后被调用。

  • importer (function, optional) – 一个将执行导入并返回导入模块(或引发 ImportError)的函数。这在有多个等效模块并且您希望导入/返回第一个可用的模块的情况下非常有用。

  • defer_check (bool, 可选) – 已弃用:已重命名为 defer_import(在版本6.7.2中弃用)

  • defer_import (bool, 可选) – 如果为True,则尝试的导入将推迟到首次使用模块或可用性标志时。该方法将返回DeferredImportModuleDeferredImportIndicator的实例。如果为False,导入将立即尝试。如果未设置,则导入将推迟,除非name已经存在于sys.modules中。

  • deferred_submodules (Iterable[str], optional) – 如果提供,这是一个可迭代的子模块名称列表,这些子模块可以在不触发延迟导入的情况下访问。例如,这个模块使用 deferred_submodules=['pyplot', 'pylab'] 用于 matplotlib

  • catch_exceptions (Iterable[Exception], optional) – 如果提供,这是在导入目标模块时将捕获的异常列表,导致 attempt_import 返回一个 ModuleUnavailable 实例。默认情况下,只捕获 ImportError。 这在模块在导入过程中可能经常返回其他异常时非常有用。

Returns: