Skip to content

build: support Python 3.15 (2.3) - #1598

Merged
dimitri-yatsenko merged 2 commits into
maint/2.3from
build/python-3.15-2.3
Oct 21, 2026
Merged

dimitri-yatsenko merged 2 commits into
maint/2.3from
build/python-3.15-2.3

Conversation

@dimitri-yatsenko

Copy link
Copy Markdown
Member

Cherry-pick of #1596 onto maint/2.3 for the v2.3.5 patch release, so DataJoint 2.3 installs on Python 3.15.

Both commits apply cleanly to v2.3.4; see #1596 for the description. The 3.10 floor is unchanged on the 2.3 line.

Python 3.15.0 was released on 2026-10-09, and `requires-python = ">=3.10,<3.15"` made pip refuse to install DataJoint on it. The cap moves to `<3.16` (in `[project]` and in the pixi workspace), the 3.15 classifier is added, and a `test-py315` pixi environment joins `test-py310` and `test-py314`. The Linux and Windows test matrices gain a 3.15 leg; 3.14 stays in both. The 3.10 floor is unchanged; dropping it is planned for 2.4.

One dependency is not ready for 3.15. `deepdiff` 9.x requires `cachebox>=5.2,<6`, and no cachebox 5.x release ships 3.15 wheels. Its sdist builds with PyO3 0.27, which supports CPython only up to 3.14, so building from source fails too. Until deepdiff accepts cachebox 6 (which does ship 3.15 wheels), installing on 3.15 fails at cachebox, and the new 3.15 CI legs will fail while installing dependencies. Every other package in the test environment has 3.15 wheels on Linux, macOS and Windows.

`pixi.lock` is regenerated. Besides the new environment it adds what the committed lock was missing: the `test-py310` and `test-py314` environments, and `packaging` in the default environment.

Part of #1569.

(cherry picked from commit 1279eac)
deepdiff 9.x requires `cachebox>=5.2,<6`. No cachebox 5.x release ships Python 3.15 wheels, and its sdist cannot be built for 3.15 because it uses PyO3 0.27, which supports CPython only up to 3.14. So on 3.15, installing DataJoint fails at cachebox.

deepdiff 8.6.x is pure Python and depends only on orderly-set. DataJoint uses deepdiff only for `DeepHash` in the three-part `make` check in autopopulate, which works the same on 8.6. The bound applies only on 3.15 and later; other Python versions keep resolving the newest deepdiff. Drop it once deepdiff accepts cachebox 6, which ships 3.15 wheels.

With this bound the full test suite passes on Python 3.15.0, integration tests included, and every compiled dependency in the test set has 3.15 wheels for Linux, macOS and Windows.

Part of #1569.

(cherry picked from commit 2d8af00)
@dimitri-yatsenko dimitri-yatsenko added this to the v2.3.5 milestone Oct 17, 2026
@dimitri-yatsenko dimitri-yatsenko added the enhancement Indicates new improvements label Oct 17, 2026

@MilagrosMarin MilagrosMarin left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

LGTM. Outside pixi.lock, the test.yaml and pyproject.toml changes match #1596 line for line, the 3.10 floor is kept, and the new py3.15 jobs pass on both MySQL images and on Windows.

@dimitri-yatsenko
dimitri-yatsenko merged commit 318f25e into maint/2.3 Oct 21, 2026
12 checks passed
@dimitri-yatsenko
dimitri-yatsenko deleted the build/python-3.15-2.3 branch October 21, 2026 15:39
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement Indicates new improvements

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants