Repository navigation
build: support Python 3.15 - #1596
Conversation
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.
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.
MilagrosMarin
left a comment
There was a problem hiding this comment.
Thanks @dimitri-yatsenko — straightforward and well scoped.
✅ The cap moves to <3.16 in both [project] and the pixi workspace, and the 3.15 classifier is added.
✅ CI: all green, including the new test-py315 legs on both MySQL images and unit-tests-windows (py3.15).
✅ The deepdiff hold is as narrow as it can be: DataJoint uses it only for DeepHash in the three-part make check (autopopulate.py), the environment marker limits it to 3.15, and the lock confirms it — test-py315 resolves deepdiff 8.6.2, while test-py310 and test-py314 get 9.1.0.
✅ The default, dev and test environments stay locked at Python 3.13.7, so raising the cap doesn't silently move local pixi run test onto 3.15.
✅ The fork start-method pin in autopopulate.py already covers 3.15, which keeps 3.14's forkserver default.
Approving — looks good to me.
Part of #1569. This is the Python 3.15 half; dropping 3.10 follows in 2.4.
Python 3.15.0 was released on 2026-10-09.
requires-python = ">=3.10,<3.15"makes pip refuse to install DataJoint on it.requires-pythonbecomes<3.16, in[project]and in the pixi workspace, and the 3.15 classifier is added.test-py315pixi environment joinstest-py310andtest-py314, and the Linux and Windows test matrices gain a 3.15 leg. 3.14 stays in both. The 3.10 floor is unchanged.cachebox>=5.2,<6. No cachebox 5.x release ships 3.15 wheels, and its sdist cannot build for 3.15 (PyO3 0.27 supports CPython only up to 3.14).DeepHashin the three-partmakecheck, which behaves the same on 8.6.pixi.lockis regenerated. Besides the new environment, it adds what the committed lock was missing: thetest-py310andtest-py314environments, andpackagingin the default environment.With the bound, the full suite passes on Python 3.15.0, integration tests included. Every compiled dependency in the test set has 3.15 wheels for Linux, macOS and Windows.
The same commits go onto
maint/2.3for the v2.3.5 patch release.