Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
effigies opened this issue Sep 9, 2019 · 5 comments
Open

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

effigies opened this issue Sep 9, 2019 · 5 comments

Comments

@effigies
Copy link
Member

effigies commented Sep 9, 2019

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

@effigies effigies pinned this issue Sep 9, 2019
@matthew-brett
Copy link
Member

matthew-brett commented Sep 9, 2019 via email

@skoudoro
Copy link
Member

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

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

@effigies
Copy link
Member Author

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
Copy link

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
Copy link
Contributor

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).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants