Skip to content

Drop support for Python 3.8 and 3.9; test on 3.13 and 3.14 - #379

Merged
mdickinson merged 5 commits into
mainfrom
drop-python-38-39-add-314
Sep 22, 2026
Merged

mdickinson merged 5 commits into
mainfrom
drop-python-38-39-add-314

Conversation

@mdickinson

@mdickinson mdickinson commented Sep 22, 2026 •

Copy link
Copy Markdown
Member

Raise the minimum supported Python to 3.10 and extend the test matrices
upwards.

What changed

  • python_requires is now >=3.10; test-with-pip.yml runs 3.10–3.14
    and test-minimal-dependencies.yml runs 3.10–3.15. 3.15 is at rc.2, so
    setup-python needs allow-prereleases: true to resolve it; the flag has no
    effect on the other entries, and it stays in place so later versions can be
    added to the matrix as soon as they reach beta. 3.15 is confined to the
    minimal workflow because the h5 extra pulls in tables → blosc2 →
    ndindex, and ndindex has no cp315 wheel and segfaults building from its
    sdist.
  • EDM ships no runtime newer than 3.11, so test-with-edm.yml and
    ets-from-source.yml now build only a 3.11 environment, and
    etstool.py's per-runtime dependency split collapses into a single
    EDM_DEPENDENCIES set. That also fixes the weekly
    "Test with EDM using ETS packages from source"
    failures: traits' main branch has required Python >= 3.10 since
    Require Python >= 3.10, and replace pkg_resources with importlib.resources traits#1895, so installing it into a 3.8 environment has failed
    every week since 2026-08-14.
  • importlib_resources is gone as a fallback for
    importlib.resources.files, along with the test extra that supplied it.
  • The numpy < 2.0; python_version<'3.10' markers are gone — the PyTables
    incompatibility they worked around (PyTables is incompatible with NumPy 2.0 #345) only applied below 3.10.
  • The macOS-only install split in test-with-pip.yml is gone; it existed
    because PyTables would not build on Apple Silicon for Python < 3.10 (Test workflows fail on macOS due to PyTables #344).

One thing worth a look

flake8_ets is not packaged in EDM for 3.11 on any platform, so the EDM style
check no longer runs the H101/H102 copyright checks. check-style-strict.yml
is untouched and still checks copyright end years with flake8-ets from PyPI;
H101 is no longer enforced anywhere.

Verification

Locally, on 3.10 and 3.14, pip install .[gui,h5,preferences] resolves and all
358 tests pass; on 3.15, pip install .[test] resolves against traits 7.2.0's
cp315 wheel and the suite passes. flake8 over the usual targets is clean both
with and without flake8-ets. Every package in the new EDM_DEPENDENCIES set is
available in EDM for 3.11 on both rh8-x86_64 and win-x86_64.

🤖 Generated with Claude Code

mdickinson and others added 3 commits September 22, 2026 09:14
The minimum supported Python is now 3.10, and the pip-based test matrices
gain 3.13 and 3.14.

Consequences:

* EDM has no runtime newer than 3.11, so the EDM workflows now run on
  3.11 alone, and etstool's runtime-specific dependency split collapses
  into a single set.
* flake8_ets is not packaged in EDM for 3.11, so the EDM style check
  drops it and no longer runs the H101/H102 copyright checks.  The
  strict-style workflow, which installs flake8-ets from PyPI, is
  unchanged and still checks copyright end years.
* importlib_resources is no longer needed as a fallback for
  importlib.resources.files, and NumPy 2.x is usable everywhere, so the
  python_version markers guarding both are gone.
* The macOS install split in the pip workflow existed because PyTables
  would not build on Apple Silicon for Python < 3.10; it is no longer
  reachable.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
3.15 is at rc.2, so setup-python needs allow-prereleases to resolve it.
The flag has no effect on matrix entries that have a generally available
release, and it stays in place afterwards so that 3.16 and its successors
can be added to the matrix as soon as they reach beta.

Only the minimal-dependency workflow gains 3.15: the h5 extra pulls in
tables -> blosc2 -> ndindex, and ndindex has no cp315 wheel and does not
build from its sdist.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@mdickinson
mdickinson force-pushed the drop-python-38-39-add-314 branch from 906c700 to 65c3fbe Compare September 22, 2026 08:15
mdickinson and others added 2 commits September 22, 2026 09:19
The hand-written fragment was missing the " (#379)" suffix that
"etstool.py changelog create" appends, and wrapped across two lines.
"changelog build" concatenates fragments verbatim, so both would have
shown up in CHANGES.txt.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@mdickinson
mdickinson merged commit 746eec4 into main Sep 22, 2026
24 checks passed
@mdickinson
mdickinson deleted the drop-python-38-39-add-314 branch September 22, 2026 08:57
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

Successfully merging this pull request may close these issues.

1 participant