Skip to content

build: support Python 3.15 (2.3) - #1598

Open
dimitri-yatsenko wants to merge 2 commits into
maint/2.3from
build/python-3.15-2.3
Open

dimitri-yatsenko wants to merge 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

This branch has not been deployed

No deployments
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.

1 participant