Skip to content

feat: support Python 3.11–3.14 via modernized deps#110

Draft
zieka wants to merge 1 commit into
feat/python-3.11-for-2.0.0from
feat/python-3.14-compat
Draft

feat: support Python 3.11–3.14 via modernized deps#110
zieka wants to merge 1 commit into
feat/python-3.11-for-2.0.0from
feat/python-3.14-compat

Conversation

@zieka

@zieka zieka commented Jun 15, 2026

Copy link
Copy Markdown
Member

Problem

  • The package's hard pins keep it (and the platform that runs it) stuck on Python 3.11.
  • pandas==2.0.3, numpy==1.24.4, matplotlib==3.7.1 have no wheels for 3.12+, so newer Pythons can't install them.

Objectives

  1. Modernize the compiled deps to support Python 3.11 through 3.14.
  2. Keep requires-python>=3.11 so the platform's 3.11 runtime still works.
  3. Let the prerelease workflow build/test under 3.14.
Assumptions
  • code-data-science==2.2.0 only needs pandas>=2.0.3 (no caps), so it doesn't block the bump.
  • pandas capped <3.0 on purpose; 2.3.3 still ships 3.14 wheels, avoiding the pandas 3.0 major.
  • The modern deps also have 3.11 wheels, so this is one universal 3.11–3.14 lock, not a 3.14-only fork.
Changes
  • (1) pyproject.toml: matplotlib>=3.9, pandas>=2.2,<3.0, numpy>=2.1, networkx>=3.2, plotly>=5.14.1; uv.lock regenerated.
  • (1,2) README.md: drop the < 3.13 ceiling; state 3.11–3.14 supported. requires-python>=3.11 unchanged.
  • (3) prerelease.yml: add 3.14 to python_version choices.
Notes
  • Validation: full 90-notebook papermill sweep on 3.14.5 (resolves pandas 2.3.3 / numpy 2.4.6 / matplotlib 3.11 / plotly 6.8) = 86/90 pass; the 4 others are environmental (graphviz dot binary ×3, undeclared gradio_client ×1), none from 3.14/modern deps. Same set runs on 3.11.
  • Execution-verified, not visual-output-verified — spot-QA charts before promoting.
  • 2.0.0a2 published from this branch; CI uv sync --python 3.14 passed on Linux.
  • Follow-up (out of scope): checks.yml still validates only under 3.11; a 3.11–3.14 matrix would exercise resolution (and poe check-options) per-version in CI.
  • Stacked on feat!: require Python 3.11 #109; base is that branch and auto-retargets to main on merge.

Bump the compiled deps to ranges that ship wheels for 3.11 through 3.14:
matplotlib>=3.9, pandas>=2.2,<3.0, numpy>=2.1, networkx>=3.2 (plotly
loosened too). The old hard pins (pandas==2.0.3, numpy==1.24.4,
matplotlib==3.7.1) have no 3.12+ wheels, which is what kept us on 3.11.
requires-python stays >=3.11 so the platform's 3.11 runtime is still
supported; the lock is a universal resolve across 3.11-3.14.

pandas is capped <3.0 to ride the battle-tested 2.x line (pandas 3.0 is a
major breaking release); 2.3.3 still has 3.14 wheels, so nothing is lost.

On 3.14.5 this resolves to pandas 2.3.3 / numpy 2.4.6 / matplotlib 3.11 /
plotly 6.8 / networkx 3.6. Full 90-notebook papermill sweep:
- 86/90 pass.
- 4 remaining are environmental and Python-version-independent: 3 need the
  graphviz `dot` system binary (present in the platform image), 1 is
  recommendations.ipynb (undeclared gradio_client dep).
- 0 failures attributable to 3.14 or the modern pandas/numpy APIs.
The same modern-dep set also runs on 3.11 (spot-checked), so support is
genuinely 3.11-3.14, not a 3.14-only fork.

Also add 3.14 to the prerelease workflow's python_version choices so a
candidate can be CI-built/tested under 3.14.
@zieka zieka force-pushed the feat/python-3.14-compat branch from cf87ff0 to ee2741f Compare June 15, 2026 23:48
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