依赖项版本策略#
就本文档而言,"次要版本"是指 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 中的一个严重 bug.
依赖版本列表#
以下列表显示了不同 Matplotlib 版本的 Python 和 NumPy 依赖项的最低版本.请点击链接查看依赖项的完整规范.
Matplotlib |
Python |
NumPy |
|---|---|---|
3.9 |
1.23.0 |
|
3.9 |
1.21.0 |
|
3.8 |
1.20.0 |
|
3.8 |
1.19.0 |
|
3.7 |
1.17.0 |
|
3.7 |
1.16.0 |
|
3.6 |
1.15.0 |
|
3.6 |
1.11.0 |
|
3.6 |
1.11.0 |
|
3.5 |
1.10.0 |
|
2.7, 3.4 |
1.7.1 |
|
2.7, 3.4 |
1.7.1 |
|
2.7, 3.4 |
1.7.1 |
|
2.7, 3.4 |
1.6 |
|
2.6, 3.3 |
1.6 |
|
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 |