依赖版本策略#

在本文件中,'次要版本' 是指 SemVer(主要、次要、补丁)意义上的次要版本,或 EffVer 意义上的 '中版本'(宏观、中观、微观)。它包括主要/宏观和次要/中观版本。对于使用基于日期的版本控制的项目,每个版本都是 '次要版本'。

Matplotlib 遵循 NEP 29

Python 和 NumPy#

Matplotlib 支持:

  • 所有在项目前42个月发布的Python次要版本,以及至少最新的两个次要版本。

  • 在项目前24个月内发布的所有 numpy 次要版本,以及至少最后三个次要版本。

pyproject.toml 中,requires-python 变量应设置为支持的最低 Python 版本。所有支持的 Python 次要版本都应在测试矩阵中,并为发布构建二进制工件。

Python 和 NumPy 的最低版本支持应在每个主要和次要版本中向上调整,但绝不应在补丁版本中调整。

另请参阅 依赖最小版本列表

Python 依赖项#

对于Python依赖项,我们应该至少支持:

带有编译扩展

在我们计划发布日期前的24个月内最初发布的小版本,或者支持我们最低Python + NumPy的最早版本

没有编译的扩展

在我们计划发布日期前12个月内最初发布的小版本,或者支持我们最低Python版本的最旧版本。

我们只会在需要新功能或旧版本不再支持我们的最低 NumPy 或 Python 版本时,才会更新这些依赖项。

在实际可行的情况下,我们将在依赖项中绕过错误。

IPython 和 Matplotlib 并不正式相互依赖,然而在将 Matplotlib 的 UI 集成到 IPython 和 IPykernel 方面存在实际的耦合。我们将确保这种集成至少在计划发布日期前24个月内发布的 IPython 和 IPykernel 的次要或主要版本中工作。Matplotlib 可能与旧版本兼容,也可能不兼容,如果在此时间窗口外使用 IPython 或 IPykernel,我们将不会发出警告。

测试和文档依赖项#

由于这些包仅用于测试或构建文档,而不是最终用户所需,我们可以更积极地放弃对旧版本的支持。然而,我们需要小心,不要超出下游包维护者支持的范围(因为大多数包维护者在打包过程中运行测试和构建文档)。

我们将支持至少在计划发布前12个月内发布的开发依赖项的次要版本。已知存在缺陷的特定版本可能会通过实际可行的最细粒度过滤排除在支持之外。

我们只会在需要时或版本不再支持我们的最低Python和NumPy版本时更新这些。

系统和C依赖项#

对于系统或C依赖项(如FreeType、GUI框架、LaTeX、Ghostscript、FFmpeg),我们尽可能支持较旧的版本。这些依赖项对于终端用户来说可能难以安装,我们希望尽可能在更多的系统上可用。我们将根据具体情况升级这些依赖项。

对于我们依赖于可用Python绑定的GUI框架,我们也将放弃对那些不支持我们支持的任何Python版本的过时绑定的支持。

依赖项中的安全问题#

通常,我们不会根据安全漏洞调整依赖项的支持版本。我们是一个库,不是一个应用程序,我们对依赖项的版本约束表明了哪些版本是可行的(而不是哪些版本是明智的选择)。用户和打包者可以根据自己的判断和风险评估来安装依赖项的较新版本。相比之下,如果我们调整最低支持版本,用户很难覆盖我们的判断。

如果 Matplotlib 有助于利用底层漏洞,我们应该将其视为 Matplotlib 中的一个严重漏洞。

依赖版本列表#

以下列表显示了不同版本的 Matplotlib 所需的最小 Python 和 NumPy 依赖版本。点击链接查看完整的依赖说明。

Matplotlib

Python

NumPy

3.9

3.9

1.23.0

3.8

3.9

1.21.0

3.7

3.8

1.20.0

3.6

3.8

1.19.0

3.5

3.7

1.17.0

3.4

3.7

1.16.0

3.3

3.6

1.15.0

3.2

3.6

1.11.0

3.1

3.6

1.11.0

3.0

3.5

1.10.0

2.2

2.7, 3.4

1.7.1

2.1

2.7, 3.4

1.7.1

2.0

2.7, 3.4

1.7.1

1.5

2.7, 3.4

1.6

1.4

2.6, 3.3

1.6

1.3

2.6, 3.3

1.5

1.2

2.6, 3.1

1.4

1.1

2.4

1.1

1.0

2.4

1.1