依赖项#

依赖类型#

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_switch 中的 run_test_for_class 通过类标签来调节条件。否则,请使用 _check_soft_dependencies 来处理新的软依赖,并设置 severity="none"。确保所有用于测试的软依赖都在测试函数内部导入,而不是在模块的根级别(顶部)导入。这样,装饰器将跳过您的测试(包括导入),除非系统安装了所需的包。这可以防止用户在没有所需软依赖的情况下运行 check_estimator 检查所有估计器或进行完整的本地 pytest 运行时发生崩溃。有关 run_test_for_class 使用的具体示例,请参见 forecasting.tests.test_pmdarima 中的测试。有关 _check_soft_dependencies 使用的示例,请参见 utils.tests.test_plotting

添加和维护软依赖#

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

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

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

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

为了维护目的,已经决定所有软依赖项都必须指定上下限。软依赖项将根据 sktime 的每个组件(例如 forecastingclassificationregression 等)分别在不同的 extras 中指定。当单个包出现在不同的 extras 中时,可以有不同的上下限,并且可以在一个 extras 中修改而不影响其他 extras。

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

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

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

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

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

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

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

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