Skip to content

build: support Python 3.15 - #1596

Open
dimitri-yatsenko wants to merge 2 commits into
masterfrom
build/python-3.15
Open

dimitri-yatsenko wants to merge 2 commits into
masterfrom
build/python-3.15

Conversation

@dimitri-yatsenko

Copy link
Copy Markdown
Member

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.

  • Cap: requires-python becomes <3.16, in [project] and in the pixi workspace, and the 3.15 classifier is added.
  • CI: a test-py315 pixi environment joins test-py310 and test-py314, and the Linux and Windows test matrices gain a 3.15 leg. 3.14 stays in both. The 3.10 floor is unchanged.
  • deepdiff is held below 9 on Python 3.15 only.
    • Why: deepdiff 9.x requires 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).
    • Why it's safe: deepdiff 8.6.x is pure Python, and DataJoint uses deepdiff only for DeepHash in the three-part make check, which behaves the same on 8.6.
    • Other Python versions keep resolving the newest deepdiff.
    • Drop the bound once deepdiff accepts cachebox 6, which ships 3.15 wheels.
  • 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.

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.3 for the v2.3.5 patch release.

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.

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