依赖项#
依赖类型#
在 sktime
中有三种类型的依赖:核心、软 或 开发者。
备注
我们尽量将核心依赖的数量保持在最低限度,并在可行的情况下依赖其他软件包作为软依赖。
处理软依赖#
本节解释如何处理现有的软依赖。如需添加新的软依赖,请参阅“添加新的软依赖”一节。
在 sktime
中的软依赖通常应隔离到估计器中。
在用户需要的情况下,应提出关于缺失软依赖的警告或错误信息。这是通过我们的 _check_soft_dependencies
实用工具 这里 处理的。在估计器中添加此类警告有特定的约定,如下所示。
带有软依赖的估计器需要确保以下几点:
仅在估计器内部发生软依赖的导入,例如在估计器的
_fit
或__init__
方法中。在__init__
中,导入应在调用super(cls).__init__
之后进行。估计器的打包标签被填充,即
python_dependencies
使用符合 PEP 440 的依赖说明符字符串,例如pandas>=2.0.1
,如果需要特定标记,还可以选择python_version
和env_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
的每个组件(例如 forecasting
、 classification
、 regression
等)分别在不同的 extras 中指定。当单个包出现在不同的 extras 中时,可以有不同的上下限,并且可以在一个 extras 中修改而不影响其他 extras。
上限将被优先设置为包的下一个 minor
版本,因为根据语义版本控制的惯例,patch
更新永远不应包含破坏性更改。对于稳定的包,也可以使用下一个 major
版本。
上界将使用 dependabot
自动更新,该工具已设置为基于 PyPI
上的发布每日运行。引入新上界的 CI 只有在受影响组件的所有单元测试通过后,才会被合并到 main
分支。
下限维护计划正在进行中,并将很快在此更新。
添加核心或开发者依赖项#
核心或开发者依赖项只能在核心开发者会议讨论后由核心开发者添加。
当添加新的核心依赖或更改现有依赖的版本时,需要更新以下文件:
pyproject.toml,在
dependencies
依赖集中添加依赖或版本范围。
当添加新的开发者依赖项或更改现有依赖项的版本时,需要更新以下文件:
pyproject.toml,在
dev
依赖集中添加依赖或版本范围。