Stats on Python 3.14 support on PyPI

We should aim to have an ecosystem where Python releases are usable day 1 and where it is easy for users to test their code prerelease if they want to.

I’m happy to report that Python 3.14 was the best Python release ever on this dimension! I have some code in GitHub - hauntsaninja/python_readiness: Are your dependencies ready for new Python? that lets me assess whether a package supports a given Python version (check it out, I’ve found it quite helpful for upgrading).

Running this on the top 15000 PyPI packages (thanks hugovk!), we see on day 1, 1289 packages explicitly support Python 3.14 (as opposed to 994 for 3.13)

It’s also interesting to look only at packages with version-specific wheels. Often the lack of a version specific wheel is a hard blocker for users (compared to pure Python packages, where explicit support might just mean an extra entry in the test matrix and adding the classifier). Here we see on day 1 that 347 packages have wheels that support Python 3.14 (as opposed to 178 for 3.13)

I said this last year too, but every time one of those lines moves, it’s because someone somewhere did something in response to a new Python version, and made that labour freely available on the internet — this will never not be insanely cool to me.

31 Likes

What happened 120 days ago that suddenly 100 packages with version specific wheels had 3.14 wheels?

2 Likes

I think that was the release of cibuildwheel 3.0: Release v3.0.0 · pypa/cibuildwheel · GitHub . I’m pretty sure there’s also a change in the first derivative when cibuildwheel 3.1 came out: Release v3.1.0 · pypa/cibuildwheel · GitHub

9 Likes

Looking at projects that support the free-threaded build specifically, here is the equivalent plot:

This includes projects that support cp313t, which is why the graph starts near 50 in April. It’s difficult to use Hugo’s tracker before then so the graph doesn’t continue back to the release of Python 3.13.

See Add a plot of historical data · Issue #23 · hugovk/free-threaded-wheels · GitHub if you’re curious how I got these numbers.

1 Like

The big jump on 14th June is @ronaldoussoren adding 3.14 wheels for the 159 pyobjc-* packages present in the top 15k PyPI packages (from GitHub - ronaldoussoren/pyobjc: The Python <-> Objective-C Bridge with bindings for macOS frameworks ). These don’t seem to use cibuildwheel.

The slope very clearly changes with the release of Python 3.14 rc1 and cibuildwheel 3.1. (cibuildwheel 3.1 enabled Python 3.14 builds by default). Spot checking a few releases after the rc1 date shows that a lot of them do use cibuildwheel

4 Likes

That’s correct, I don’t use cibuildwheel for PyObjC. PyObjC uses a custom solution, and has the advantage of building wheels for only 1 OS.