speechbrain.utils.importutils 模块

模块导入相关实用工具。

作者
  • 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

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

参数:
  • name (str) – 模块名称。

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

  • package (str, 可选) – 如果指定,目标模块加载将相对于此包。根据你将延迟模块注入环境的方式,你可以选择在此处指定包,或者选择将其包含在 name 中使用点语法。例如,请参阅 lazy_export()deprecated_redirect() 的不同之处。

ensure_module(stacklevel: int) ModuleType[source]

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

参数:

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

引发:

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

返回类型:

确保导入后返回目标模块。

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

基类: LazyModule

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

这只是模块类型本身;如果你想定义重定向,请使用 deprecated_redirect()

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

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

  • extra_reason (str, 可选) – 如果指定,将额外文本附加到警告中以进行澄清(例如,说明移动发生的原因,或需要注意的其他问题)。

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"]

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

参数:
  • file_path (str) – 要导航其目录的文件路径。通常是调用此函数的 __init__.py 路径,使用 __file__

  • find_subpackages (bool) – 是否也应该查找子包。

返回:

imports – 与同一模块的可导入脚本列表。

返回类型:

List[str]

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

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

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

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

返回类型:

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

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

参数:
  • 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 警告。

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

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

  • extra_reason (str, 可选) – 如果指定,将额外文本附加到警告中以进行澄清(例如,说明移动发生的原因,或需要注意的其他问题)。

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