尝试导入
(函数来自 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
导入可以“延迟”到代码首次尝试访问模块或检查可用标志的布尔值为止。这允许在模块范围内声明可选依赖项,但在模块实际使用它们之前不会导入(从而加快初始包的导入速度)。延迟导入由两个辅助类处理(
DeferredImportModule和DeferredImportIndicator)。在实际导入时,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,则尝试的导入将推迟到首次使用模块或可用性标志时。该方法将返回
DeferredImportModule和DeferredImportIndicator的实例。如果为False,导入将立即尝试。如果未设置,则导入将推迟,除非name已经存在于sys.modules中。deferred_submodules (Iterable[str], optional) – 如果提供,这是一个可迭代的子模块名称列表,这些子模块可以在不触发延迟导入的情况下访问。例如,这个模块使用
deferred_submodules=['pyplot', 'pylab']用于matplotlib。catch_exceptions (Iterable[Exception], optional) – 如果提供,这是在导入目标模块时将捕获的异常列表,导致
attempt_import返回一个ModuleUnavailable实例。默认情况下,只捕获ImportError。 这在模块在导入过程中可能经常返回其他异常时非常有用。
- Returns:
module – 导入的模块,或者是
ModuleUnavailable的实例,或者是DeferredImportModule的实例bool – 布尔值,指示模块导入是否成功,或者是
DeferredImportIndicator的实例