fatiando / community

Community resources, guidelines, meeting notes, authorship policy, maintenance, etc.
Other
8 stars 5 forks source link

Dependency version support plan #40

Closed leouieda closed 1 year ago

leouieda commented 2 years ago

Description:

We currently don't really specify the supported versions of many of our dependencies. We've been fine so far but some things are beginning to break, for example the Verde CI has been breaking in Python 3.6 (fatiando/verde#333). I think it's time we adopted a formal policy for dropping older versions of dependencies and implemented testing mechanisms to make sure things work as intended.

Proposal:

I propose we follow NEP 29:

And extend it with:

Implementation:

All projects will need to:

Exceptions:

The only exception I can think of is Pooch, which is used by other libraries and should endeavour to support the minimum Python versions supported by these libraries. We should also be more conservative the number of versions supported of dependencies since we don't want to be the cause of broken environments.

Apply to:

Further instructions:

We want your help!

We know that maintenance tasks are very demanding, so we don't expect a single person to tackle this issue by themselves. Any help is very welcomed, so please comment below that you want to take care of the changes on any repository and we will assign it to you.

leouieda commented 2 years ago

Right now, the timeline we can follow is:

date python numpy
Jul 26, 2021 3.7+ 1.18+
Dec 22, 2021 3.7+ 1.19+
Dec 26, 2021 3.8+ 1.19+

Maintaining Python 3.7 for a while longer is unlikely to cause problems so I would propose starting off with Python >= 3.7 and Numpy >= 1.18.

I could use some help collecting the versions of our other dependencies.

leouieda commented 2 years ago

Turned out to be a bit more work than I expected. See fatiando/pooch#280 for a working implementation.

leouieda commented 2 years ago

This is done in Pooch and will be official from the 1.6.0 release planned for Jan 2022.

leouieda commented 2 years ago

Done for Boule in fatiando/boule#111

One problem that arose is the lack of binary wheels for Python 3.10 of older versions of numpy (and likely other packages), which means that it can be difficult to install older numpys on the latest Python. So I opted for running the oldest dependencies on the oldest Python and newer dependencies on the newer Python. These are more likely combinations and reduces the size of the CI matrix quite a bit. Besides, asking for the latest numpy in Python 3.6 was producing 1.19 instead of 1.23 because that's the last version with a wheel anyway.

leouieda commented 1 year ago

All our packages now have this implemented.