nipy / nibabel

Python package to access a cacophony of neuro-imaging file formats
http://nipy.org/nibabel/
Other
654 stars 258 forks source link

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

Open effigies opened 5 years ago

effigies commented 5 years ago

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

matthew-brett commented 5 years ago

I'm in favor of something a little slower, NEP + 1 year sounds good to me.

On Mon, Sep 9, 2019 at 3:19 PM Chris Markiewicz notifications@github.com wrote:

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 couple options (and am open to others):

  1. NEP 29 + 1 year, which will more closely match Python end-of-life
  2. Python end-of-life + NEP 29 schedule for numpy
  3. 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.

Related: #734 https://github.com/nipy/nibabel/issues/734 #735 https://github.com/nipy/nibabel/issues/735

@nipy/core https://github.com/orgs/nipy/teams/core @nipy/team-nibabel https://github.com/orgs/nipy/teams/team-nibabel

cc the Gentoo (@TheChymera https://github.com/TheChymera), CentOS ( @sanjayankur31 https://github.com/sanjayankur31), and NixOS (@ashgillman https://github.com/ashgillman) packagers

— You are receiving this because you are on a team that was mentioned. Reply to this email directly, view it on GitHub https://github.com/nipy/nibabel/issues/803?email_source=notifications&email_token=AAAQQHA7IA3MALEK77VBLYTQIZLQVA5CNFSM4IU3256KYY3PNVWWK3TUL52HS4DFUVEXG43VMWVGG33NNVSW45C7NFSM4HKF73AQ, or mute the thread https://github.com/notifications/unsubscribe-auth/AAAQQHBBIRDFGVHHXV3DYCLQIZLQVANCNFSM4IU3256A .

skoudoro commented 5 years ago

+1 for NEP +1 year. Thank you for this information.

(@Garyfallidis, @arokem, What do you think?)

effigies commented 5 years ago

Not getting a ton of feedback, but I'm happy to proceed on a NEP 29 + 1 year basis. That's very close to what we've been doing, and was where I was kind of inclined.

We can revisit as needed.

ashgillman commented 5 years ago

Sorry for the slow feedback. NixOS tends to move pretty fast, and locks with releases, so as long at the latest version is supported at any given time, no worries.

TheChymera commented 5 years ago

No issues on Gentoo, the distribution is rolling release, so it should always pull in the newest versions of dependencies unless otherwise specified. Our packages check the test suites, so even if numpy/python get a newer version which breaks backwards compatibility, we'll be noticing it before it gets rolled out (and probably letting you know as well).