speechbrain.utils.importutils 模块

模块导入相关的实用工具。

Author
  • Sylvain de Langen 2024

摘要

类:

DeprecatedModuleRedirect

定义了一个模块类型,该类型使用LazyModule懒加载目标模块,但在实际执行导入时记录一个弃用警告。

LazyModule

定义了一种模块类型,该类型会延迟导入目标模块,从而在不必要导入目标模块的情况下暴露内容。

函数:

deprecated_redirect

修补模块列表以添加从 old_importnew_import 的延迟重定向,导入时发出 DeprecationWarning

find_imports

返回与指定文件在同一模块中可导入的脚本列表。

lazy_export

使name在指定package的模块列表中延迟可用,除非它已经被加载,在这种情况下它将被忽略。

lazy_export_all

使得模块下的所有模块仅通过访问即可延迟导入;例如,foo/bar.py 可以通过 foo.bar.some_func() 访问。

参考

class speechbrain.utils.importutils.LazyModule(name: str, target: str, package: str | None)[source]

基础:ModuleType

定义了一种模块类型,该类型会延迟导入目标模块,从而在不必要导入目标模块的情况下暴露内容。

Parameters:
  • name (str) – 模块的名称。

  • target (str) – 需要延迟加载的模块。

  • package (str, optional) – 如果指定,目标模块的加载将相对于此包进行。 根据您如何将惰性模块注入到环境中,您可以选择在此处指定包,或者您可以选择将其包含到name中使用点语法。 例如,参见lazy_export()deprecated_redirect()的不同之处。

ensure_module(stacklevel: int) ModuleType[source]

确保目标模块被导入并可用作self.lazy_module,同时返回它。

Parameters:

stacklevel (int) – 导致导入发生的函数的堆栈跟踪级别,相对于此函数的调用者(例如,如果在函数f中调用ensure_module(1),它将引用调用f的函数)。

Raises:

AttributeError – 当发现负责导入尝试的函数是 inspect.py 时,我们在这里引发一个 AttributeError。这是因为某些代码会无意中导致我们的模块被导入,例如 PyTorch 的一些操作注册机制。

Return type:

确保导入后的目标模块。

class speechbrain.utils.importutils.DeprecatedModuleRedirect(old_import: str, new_import: str, extra_reason: str | None = None)[source]

基础类:LazyModule

定义了一种模块类型,该类型使用LazyModule延迟导入目标模块,但在实际执行导入时记录弃用警告。

这仅是模块类型本身;如果你想定义一个重定向,请使用deprecated_redirect()代替。

Parameters:
  • old_import (str) – 旧的模块导入路径,例如 mypackage.myoldmodule

  • new_import (str) – 新模块导入路径,例如 mypackage.mynewcoolmodule.mycoolsubmodule

  • extra_reason (str, optional) – 如果指定,附加到警告中的额外文本以进行澄清 (例如,说明为什么发生了移动,或者需要额外注意的问题)。

ensure_module(stacklevel: int) ModuleType[source]
speechbrain.utils.importutils.find_imports(file_path: str, find_subpackages: bool = False) List[str][source]

返回与指定文件在同一模块中可导入的脚本列表。例如,如果你有 foo/__init__.pyfoo/bar.py,那么 files_in_module("foo/__init__.py") 的结果将是 ["bar"]

非递归;这仅适用于给定路径下包的直接模块/子包。

Parameters:
  • file_path (str) – 用于导航目录的文件路径。通常是从__init__.py路径调用的,使用__file__

  • find_subpackages (bool) – 是否我们也应该找到子包。

Returns:

imports – 具有相同模块的可导入脚本列表。

Return type:

列表[str]

speechbrain.utils.importutils.lazy_export(name: str, package: str)[source]

使name在指定package的模块列表下延迟可用,除非它已经被加载,在这种情况下它将被忽略。

Parameters:
  • name (str) – 模块的名称,只要它可以通过{package}.{name}导入。

  • package (str) – 相关的包,通常由__name____init__.py确定。

Return type:

speechbrain.utils.importutils.lazy_export_all(init_file_path: str, package: str, export_subpackages: bool = False)[source]

使得模块下的所有模块仅通过访问即可延迟导入;例如,foo/bar.py 可以通过 foo.bar.some_func() 访问。

Parameters:
  • init_file_path (str) – __init__.py 文件的路径,通常通过 __file__ 确定。

  • package (str) – 相关的包,通常由__init__.py中的__name__确定。

  • export_subpackages (bool) – 我们是否也应该使子包(子目录)直接可用。

speechbrain.utils.importutils.deprecated_redirect(old_import: str, new_import: str, extra_reason: str | None = None, also_lazy_export: bool = False) None[source]

修补模块列表以添加从old_importnew_import的延迟重定向,导入时发出DeprecationWarning

Parameters:
  • old_import (str) – 旧的模块导入路径,例如 mypackage.myoldmodule

  • new_import (str) – 新模块导入路径,例如 mypackage.mycoolpackage.mynewmodule

  • extra_reason (str, optional) – 如果指定,附加到警告中的额外文本以进行澄清 (例如,说明为什么发生了移动,或者需要额外注意的问题)。

  • also_lazy_export (bool) – 是否应该将模块也作为懒加载模块导出到由old_import确定的包中。 例如,如果你有一个foo.bar.somefunc导入为old_import,假设你已经导入了foo(或懒加载),你可以直接使用foo.bar.somefunc而无需显式导入foo.bar