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

Add support for Python 3.13 #3490

Merged
merged 16 commits into from
Dec 19, 2024
Merged
Show file tree
Hide file tree
Changes from 8 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/benchmarks.yml
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ jobs:
cache-environment-key: micromamba-environment-${{ steps.date.outputs.date }}
create-args: >-
gmt=6.5.0
python=3.12
python=3.13
numpy
pandas
xarray
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/cache_data.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ jobs:
- conda-forge
- nodefaults
create-args: >-
python=3.12
python=3.13
gmt=6.5.0
numpy
pandas
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/ci_docs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ jobs:
# Is it a draft Pull Request (true or false)?
isDraft:
- ${{ github.event.pull_request.draft }}
# Only run one job (Ubuntu + Python 3.12) for draft PRs
# Only run one job (Ubuntu + Python 3.13) for draft PRs
weiji14 marked this conversation as resolved.
Show resolved Hide resolved
exclude:
- os: macos-latest
isDraft: true
Expand Down Expand Up @@ -92,7 +92,7 @@ jobs:
# environment cache is persistent for one week.
cache-environment-key: micromamba-environment-${{ steps.date.outputs.date }}
create-args: >-
python=3.12
python=3.13
gmt=6.5.0
ghostscript=10.04.0
numpy
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/ci_doctests.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ jobs:
- conda-forge
- nodefaults
create-args: >-
python=3.12
python=3.13
gmt=6.5.0
numpy
pandas
Expand Down
14 changes: 7 additions & 7 deletions .github/workflows/ci_tests.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -54,36 +54,36 @@ jobs:
strategy:
fail-fast: false
matrix:
python-version: ['3.10', '3.12']
python-version: ['3.10', '3.13']
os: [ubuntu-latest, macos-latest, windows-latest]
# Is it a draft Pull Request (true or false)?
isDraft:
- ${{ github.event.pull_request.draft }}
# Only run two jobs (Ubuntu + Python 3.10/3.12) for draft PRs
# Only run two jobs (Ubuntu + Python 3.10/3.13) for draft PRs
exclude:
- os: macos-latest
isDraft: true
- os: windows-latest
isDraft: true
# Pair Python 3.10 with the minimum supported versions of NumPy, pandas, Xarray
# and Python 3.12 with the latest versions of NumPy, pandas, Xarray
# Only install optional packages on Python 3.12
# and Python 3.13 with the latest versions of NumPy, pandas, Xarray
# Only install optional packages on Python 3.13
include:
- python-version: '3.10'
numpy-version: '1.24'
pandas-version: '=2.0'
xarray-version: '=2023.04'
optional-packages: ''
- python-version: '3.12'
- python-version: '3.13'
numpy-version: '2.1'
pandas-version: ''
xarray-version: ''
optional-packages: ' contextily geopandas ipython pyarrow rioxarray sphinx-gallery'
optional-packages: ' contextily geopandas ipython rioxarray sphinx-gallery'
Copy link
Member Author

@weiji14 weiji14 Nov 11, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Since we're including PyArrow in the Python 3.11 CI build as of #3605, let's just remove PyArrow here until it supports Python 3.13 to not hold up #3606?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We can't remove PyArrow in the Python 3.13 job, because we need both pandas<2.2+pyarrow (in Python 3.11) and pandas>=2.2+pyarrow (in Python 3.12 or 3.13) to test the behavior changes in pands 2.2.

Copy link
Member Author

@weiji14 weiji14 Nov 11, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I was thinking we could do (after #3606) Python 3.11+pandas=2.1+pyarrow; Python 3.12+pandas=2.2+pyarrow, but anyways, this won't work yet because mamba install is still complaining about some incompatible depedencies (looks like something on dvc):

The following packages are incompatible
├─ dvc >=3.56.0  is installable and it requires
|    ...
│  └─ scmrepo >=3.3.8,<4 , which requires
│     └─ asyncssh >=2.13.1,<3 , which requires
│        └─ python-gssapi >=1.2.0  with the potential options
│           ├─ python-gssapi [1.6.10|1.6.11|1.6.12|1.6.13|1.6.9] would require
│           │  └─ python_abi 3.6 *_pypy36_pp73, which can be installed (as previously explained);
│           ├─ python-gssapi [1.6.10|1.6.11|...|1.7.0] would require
│           │  └─ python >=3.6,<3.7.0a0 , which can be installed;
│           ├─ python-gssapi [1.6.10|1.6.11|...|1.8.1] would require
│           │  └─ python >=3.7,<3.8.0a0 , which can be installed;
│           ├─ python-gssapi [1.6.10|1.6.11|...|1.8.3] would require
│           │  └─ python >=3.8,<3.9.0a0 , which can be installed;
│           ├─ python-gssapi [1.6.10|1.6.11|...|1.9.0] would require
│           │  └─ python >=3.9,<3.10.0a0 , which can be installed;
│           ├─ python-gssapi [1.6.12|1.6.13|...|1.7.3] would require
│           │  └─ python_abi 3.7 *_pypy37_pp73, which can be installed (as previously explained);
│           ├─ python-gssapi [1.7.2|1.7.3|...|1.9.0] would require
│           │  └─ python >=3.10,<3.11.0a0 , which can be installed;
│           ├─ python-gssapi [1.7.3|1.8.0|1.8.1|1.8.2] would require
│           │  └─ python_abi 3.8 *_pypy38_pp73, which can be installed (as previously explained);
│           ├─ python-gssapi [1.7.3|1.8.0|1.8.1|1.8.2|1.8.3] would require
│           │  ├─ pypy3.9 >=7.3.13 , which can be installed (as previously explained);
│           │  └─ python_abi 3.9 *_pypy39_pp73, which can be installed (as previously explained);
│           ├─ python-gssapi [1.8.2|1.8.3|1.9.0] would require
│           │  └─ python >=3.11,<3.12.0a0 , which can be installed;
│           ├─ python-gssapi [1.8.2|1.8.3|1.9.0] would require
│           │  └─ python_abi 3.12.* *_cp312, which can be installed (as previously explained);
│           ├─ python-gssapi 1.8.2 would require
│           │  └─ pypy3.8 >=7.3.11 , which can be installed (as previously explained);
│           └─ python-gssapi 1.8.2 would require
│              └─ pypy3.9 >=7.3.11 , which can be installed (as previously explained);
└─ python 3.13**  is not installable because there are no viable options
   ├─ python 3.13.0 conflicts with any installable versions previously reported;
   └─ python [3.13.0rc1|3.13.0rc2|3.13.0rc3] would require
      └─ _python_rc, which does not exist (perhaps a missing channel).

Wait for conda-forge/python-gssapi-feedstock#32.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Also need to wait for conda-forge/kombu-feedstock#78:

error    libmamba Could not solve for environment specs
    The following packages are incompatible
    ├─ dvc =* * is installable with the potential options
    ...
    │  └─ dvc [3.49.0|3.50.0|...|3.58.0] would require
    │     └─ celery =* * with the potential options
    ...
    │        ├─ celery [5.3.0|5.3.1|5.3.4] would require
    │        │  └─ kombu [>=5.3.0,<6.0 *|>=5.3.1,<6.0 *|>=5.3.2,<6.0 *] with the potential options
    │        │     ├─ kombu [5.3.0|5.3.1|...|5.4.1] would require
    │        │     │  └─ python >=3.10,<3.11.0a0 * with the potential options
    │        │     │     ├─ python [3.10.7|3.10.8|3.11.0|3.9.14|3.9.15], which can be installed (as previously explained);
    │        │     │     ├─ python [3.10.0|3.10.1|...|3.9.9], which can be installed (as previously explained);
    │        │     │     ├─ python [3.10.4|3.9.12], which can be installed (as previously explained);
    │        │     │     ├─ python [3.10.5|3.9.13], which can be installed (as previously explained);
    │        │     │     ├─ python [3.10.0|3.10.1|...|3.10.9], which can be installed;
    │        │     │     └─ python [3.10.6|3.11.0], which can be installed (as previously explained);
    │        │     ├─ kombu [5.3.0|5.3.1|...|5.4.1] would require
    │        │     │  └─ python >=3.11,<3.12.0a0 * with the potential options
    │        │     │     ├─ python [3.10.7|3.10.8|3.11.0|3.9.14|3.9.15], which can be installed (as previously explained);
    │        │     │     ├─ python [3.10.6|3.11.0], which can be installed (as previously explained);
    │        │     │     └─ python [3.11.0|3.11.1|...|3.11.9], which can be installed;
    │        │     ├─ kombu [5.3.0|5.3.1|5.3.2] would require
    │        │     │  └─ python_abi ==3.8 *_pypy38_pp73, which can be installed (as previously explained);
    │        │     ├─ kombu [4.6.10|4.6.11|...|5.4.0] would require
    │        │     │  └─ python >=3.8,<3.9.0a0 *, which can be installed;
    │        │     ├─ kombu [5.3.0|5.3.1|...|5.4.0] would require
    │        │     │  └─ python_abi ==3.9 *_pypy39_pp73, which can be installed (as previously explained);
    │        │     ├─ kombu [5.3.0|5.3.1|...|5.4.1] would require
    │        │     │  └─ python >=3.9,<3.10.0a0 * with the potential options
    │        │     │     ├─ python [3.10.7|3.10.8|3.11.0|3.9.14|3.9.15], which can be installed (as previously explained);
    │        │     │     ├─ python [3.9.10|3.9.12|...|3.9.9], which can be installed;
    │        │     │     ├─ python [3.9.0|3.9.1], which can be installed (as previously explained);
    │        │     │     ├─ python 3.9.1, which can be installed (as previously explained);
    │        │     │     ├─ python [3.10.0|3.10.1|...|3.9.9], which can be installed (as previously explained);
    │        │     │     ├─ python [3.10.4|3.9.12], which can be installed (as previously explained);
    │        │     │     ├─ python [3.10.5|3.9.13], which can be installed (as previously explained);
    │        │     │     ├─ python 3.9.2, which can be installed (as previously explained);
    │        │     │     └─ python [3.9.4|3.9.5|3.9.6|3.9.7], which can be installed (as previously explained);
    │        │     └─ kombu [5.3.2|5.3.3|...|5.4.1] would require
    │        │        └─ python_abi =3.12 *_cp312, which can be installed (as previously explained);

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

conda-forge/python-gssapi-feedstock#32 has been superseded by conda-forge/python-gssapi-feedstock#33.

So we still need to wait for conda-forge/kombu-feedstock#78. kombu's Python 3.13 support was added in celery/kombu#2052, which first appeared in kombu v5.5.0rc2.

kombu v5.5.0rc2 was released two months ago, and there is still no kombu v5.5.0 out. Not sure how long we have to wait.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ok, for reference, we applied a workaround for dvc in #3695, and pyarrow now has a Python 3.13 build since conda-forge/pyarrow-feedstock#139.

# The job below is for testing GeoPandas v0.x on Ubuntu.
# The python-version here can't be the versions in the matrix.python-version
# defined above. Otherwise, other jobs will be overridden by this one.
- os: 'ubuntu-latest'
python-version: '3.11' # Can't be 3.10 or 3.12.
python-version: '3.11' # Can't be 3.10 or 3.13.
numpy-version: '1.24'
pandas-version: '=2.1'
xarray-version: ''
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/ci_tests_dev.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ jobs:
# environment cache is persistent for one week.
cache-environment-key: micromamba-environment-${{ steps.date.outputs.date }}
create-args: >-
python=3.12
python=3.13
cmake
make
ninja
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/format-command.yml
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ jobs:
# Setup Python environment
- uses: actions/[email protected]
with:
python-version: '3.12'
python-version: '3.13'

# Install formatting tools
- name: Install formatting tools
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/publish-to-pypi.yml
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ jobs:
- name: Set up Python
uses: actions/[email protected]
with:
python-version: '3.12'
python-version: '3.13'

- name: Install dependencies
run: python -m pip install build
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/style_checks.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ jobs:
- name: Set up Python
uses: actions/[email protected]
with:
python-version: '3.12'
python-version: '3.13'

- name: Install packages
run: |
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/type_checks.yml
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ jobs:
- name: Set up Python
uses: actions/[email protected]
with:
python-version: '3.12'
python-version: '3.13'

- name: Install packages
run: |
Expand Down
2 changes: 1 addition & 1 deletion ci/requirements/docs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ channels:
- nodefaults
dependencies:
# Required dependencies
- python=3.12
- python=3.13
- gmt=6.5.0
- ghostscript=10.04.0
- numpy
Expand Down
4 changes: 2 additions & 2 deletions doc/install.md
Original file line number Diff line number Diff line change
Expand Up @@ -128,14 +128,14 @@ installed (we'll call it `pygmt` but feel free to change it to whatever you want
::: {tab-item} mamba
:sync: mamba
```
mamba create --name pygmt python=3.12 numpy pandas xarray netcdf4 packaging gmt
mamba create --name pygmt python=3.13 numpy pandas xarray netcdf4 packaging gmt
```
:::

::: {tab-item} conda
:sync: conda
```
conda create --name pygmt python=3.12 numpy pandas xarray netcdf4 packaging gmt
conda create --name pygmt python=3.13 numpy pandas xarray netcdf4 packaging gmt
```
:::
::::
Expand Down
2 changes: 1 addition & 1 deletion environment.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ channels:
- conda-forge
- nodefaults
dependencies:
- python=3.12
- python>=3.10
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Note that this has changed from python=3.12 to python>=3.10 to folllow SPEC 0 (same with NumPy, pandas and xarray lines below).

# Required dependencies
- gmt=6.5.0
- ghostscript=10.04.0
Expand Down
1 change: 1 addition & 0 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ classifiers = [
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.13",
"License :: OSI Approved :: BSD License",
]
dependencies = [
Expand Down
Loading