Skip to content

RFC: SPEC0 (was NEP 29) - Python and Numpy version support #803

Open
@effigies

Description

@effigies

NiBabel has adopted a NEP 29 + 1 year upstream support schedule, so there is a set of dates after which the next minor release will no longer support given versions of Python and numpy. Those dates and versions are as follows:

Date Numpy Python Next NiBabel minor version
16 Jan 2020 1.13+ 3.5.1+ 3.1
14 Mar 2020 3.6+ 3.1
6 Jun 2020 1.14+ 3.2
7 Jan 2021 1.15+ 4.0
23 Jun 2021 3.7+ 4.0
23 Jul 2021 1.16+ 4.0
13 Jan 2022 1.17+ 4.0
26 Jul 2022 1.18+ 5.0
22 Dec 2022 1.19+ 5.0
26 Dec 2022 3.8+ 5.0
21 Jun 2023 1.20+ 5.2
31 Jan 2024 1.21+ 6.0 (est)
14 Apr 2024 3.9+ 6.1 (est)
23 Jun 2024 1.22+ 6.1 (est)
01 Jan 2025 1.23+
5 Apr 2025 3.10+
22 Jun 2025 1.24+
18 Dec 2025 1.25+
4 Apr 2026 3.11+
17 Jun 2026 1.26+
16 Sep 2026 2.0+
24 Apr 2027 3.12+
2 Oct 2028 3.13+

This table is to be updated with actual release numbers when determined, and new end-of-life dates as Python and numpy releases determine them.

Original post follows.


Numpy has put out https://numpy.org/neps/nep-0029-deprecation_policy.html, which proposes that scientific Python projects adopt the following approach to supporting Python and Numpy:

  • This project supports at least the minor versions of Python initially released 42 months prior to a planned project release date.
  • The project will always support at least the 2 latest minor versions of Python.
  • support minor versions of numpy initially released in the 24 months prior to a planned project release date or the oldest version that supports the minimum Python version (whichever is higher).
  • The project will always support at least the 3 latest minor versions of NumPy.

The minimum supported version of Python will be set to python_requires in setup. All supported minor versions of Python will be in the test matrix and have binary artifacts built for releases.
The project should adjust upward the minimum Python and NumPy version support on every minor and major release, but never on a patch release.

Which works out to the following schedule:

On Jan 16, 2019 drop support for Numpy 1.12 (initially released on Jan 15, 2017)
On Mar 14, 2019 drop support for Python 3.5 (initially released on Sep 13, 2015)
On Jun 08, 2019 drop support for Numpy 1.13 (initially released on Jun 07, 2017)
On Jan 07, 2020 drop support for Numpy 1.14 (initially released on Jan 06, 2018)
On Jun 23, 2020 drop support for Python 3.6 (initially released on Dec 23, 2016)
On Jul 23, 2020 drop support for Numpy 1.15 (initially released on Jul 23, 2018)
On Jan 13, 2021 drop support for Numpy 1.16 (initially released on Jan 13, 2019)
On Jul 26, 2021 drop support for Numpy 1.17 (initially released on Jul 26, 2019)
On Dec 26, 2021 drop support for Python 3.7 (initially released on Jun 27, 2018)

This is a more rapid turnaround than we've been working with, as we've only recently dropped support for numpy < 1.12. I want to get people's thoughts on whether we should abide by this (bearing in mind that this only affects major and minor releases; patch releases can continue supporting older versions). I do think there's value in having a predictable schedule, even if it's not identical. I see a few options (and am open to others):

  1. Adopt NEP 29
  2. NEP 29 + 1 year, which will more closely match Python end-of-life
  3. Python end-of-life + NEP 29 schedule for numpy
  4. Continue as we are, ratcheting numpy when we really need to, but not faster than NEP 29

At any rate, this is definitely something we should be aware of in terms of how the overall ecosystem will interact with nibabel if we keep a slower timeline.

Whatever we adopt, it will affect the whole nipy ecosystem, so if we do adhere to NEP 29, we may effectively force that schedule onto other nipy projects.

Related: #734 #735

@nipy/core @nipy/team-nibabel

cc the Gentoo (@TheChymera), CentOS (@sanjayankur31), and NixOS (@ashgillman) packagers

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions