依赖项#

依赖项类型#

sktime 中有三种类型的依赖项:核心依赖项软依赖项开发者依赖项

注意

  • 核心依赖项 是安装和运行 sktime 所必需的,并随 sktime 自动安装,例如 pandas

  • 软依赖项 仅在导入特定模块时需要,但对于使用大多数功能来说并非必要。软依赖项不会随软件包自动安装。相反,如果用户想要使用需要软依赖项的模块,则需要手动安装它,例如 pmdarima

  • 开发者依赖项sktime 开发者所必需的,但对于 sktime 的普通用户则不是,例如 pytest

我们尽量将核心依赖项的数量保持在最低限度,并在可行时将其他包作为软依赖项。

处理软依赖项#

本节介绍如何处理现有的软依赖项。有关添加新的软依赖项,请参阅“添加新的软依赖项”一节。

sktime 中的软依赖项通常应仅限于评估器。

在用户需要软依赖项的情况下,应发出关于缺少软依赖项的信息性警告或错误消息。这通过我们的 _check_soft_dependencies 实用程序来处理,参见此处。在评估器中添加此类警告有特定的约定,如下所示。

具有软依赖项的评估器需要确保以下几点

  • 软依赖项的导入仅发生在评估器内部,例如,在评估器的 _fit__init__ 方法中。在 __init__ 中,导入应仅发生在调用 super(cls).__init__ 之后。

  • 评估器的打包标签已填充,即 python_dependencies 包含符合 PEP 440 的依赖项规范字符串,例如 pandas>=2.0.1,如果需要特定标记,则可选择包含 python_versionenv_marker。在不满足要求的环境中构建评估器时,将自动引发异常。更多详细信息,请参阅标签 API 参考,通用标签,打包

  • 使用基于软依赖项检查的 @pytest.mark.skipif(...) 条件装饰所有导入软依赖项的 pytest 测试。如果测试特定于单个评估器或对象,请使用来自 sktime.tests.test_switchrun_test_for_class 通过类标签来调节条件。否则,对于新的软依赖项,请使用 _check_soft_dependencies 并设置 severity="none"。确保所有为测试而导入的软依赖项都在测试函数本身内部导入,而不是在模块的根级别(顶部)导入。然后,除非系统安装了所需的包,否则此装饰器将跳过您的测试,包括导入。这可以防止任何用户在所有评估器上运行 check_estimator,或者在没有所需软依赖项的情况下进行完整的本地 pytest 运行时发生崩溃。请参阅 forecasting.tests.test_pmdarima 中的测试,获取使用 run_test_for_class 装饰测试的具体示例。请参阅 utils.tests.test_plotting,获取使用 _check_soft_dependencies 的示例。

添加和维护软依赖项#

添加新的软依赖项或更改现有软依赖项的版本时,需要更新以下内容

  • pyproject.toml 文件中,在 all_extras 依赖项集中添加依赖项或更新版本范围。遵循 PEP 621 约定,包括构建时依赖项和可选依赖项在内的所有依赖项都在 pyproject.toml 中指定。

  • pandas 2 兼容的软依赖项也应在 pyproject.toml 文件的 all_extras_pandas2 依赖项集中添加/更新。此依赖项集仅用于测试。

应检查新的软依赖项是否对 sktime 核心依赖项施加上限,或严重限制用户安装流程。在这种情况下,强烈建议不要添加该软依赖项。

出于维护目的,已决定所有软依赖项都必须强制指定下限和上限。软依赖项将针对 sktime 的每个组件在单独的额外依赖项中指定,例如 forecastingclassificationregression 等。当同一个包存在于不同的额外依赖项中时,可以有不同的上限和下限,并且可以在其中一个中修改而不影响其他。

上限优先设置为包的下一个 minor 版本,因为根据语义版本控制的约定,patch 更新不应包含破坏性更改。对于稳定的包,也可以使用下一个 major 版本。

上限将使用 dependabot 自动更新,该工具已设置为根据 PyPI 上的发布版本每天运行。引入新上限的 CI 仅在受影响组件的所有单元测试通过后才会被合并到 main 分支。

下限维护计划正在进行中,很快会在此更新。

添加核心或开发者依赖项#

核心或开发者依赖项只能由核心开发者在核心开发者会议讨论后添加。

添加新的核心依赖项或更改现有核心依赖项的版本时,需要更新以下文件

  • pyproject.toml,在 dependencies 依赖项集中添加依赖项或版本范围。

添加新的开发者依赖项或更改现有开发者依赖项的版本时,需要更新以下文件

  • pyproject.toml,在 dev 依赖项集中添加依赖项或版本范围。