Skip to content

deprecation: cp313t#2787

Merged
joerick merged 1 commit intopypa:mainfrom
mayeut:cpython-3.13t-deprecation
Apr 2, 2026
Merged

deprecation: cp313t#2787
joerick merged 1 commit intopypa:mainfrom
mayeut:cpython-3.13t-deprecation

Conversation

@mayeut
Copy link
Copy Markdown
Member

@mayeut mayeut commented Mar 21, 2026

Free-Threading Python 3.13 was experimental.
Now that Python 3.14 has been released with explicit support, we can schedule removal of Python 3.13 free-threading.

towards #2683
see also #2684

@mayeut mayeut force-pushed the cpython-3.13t-deprecation branch from 2fb84a9 to 4a75946 Compare March 21, 2026 11:59
Copy link
Copy Markdown
Contributor

@henryiii henryiii left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As soon as we are sure the next version is a minor version bump, I think this should go in.

@mayeut mayeut force-pushed the cpython-3.13t-deprecation branch from 2887863 to 7f5d182 Compare March 28, 2026 09:10
@mayeut
Copy link
Copy Markdown
Member Author

mayeut commented Mar 28, 2026

I rebased to fix the conflict with typing.Self. I had to add an exception for mypy checks.

As soon as we are sure the next version is a minor version bump, I think this should go in.

The removal is now approximately 1 month away.
Should we merge and bump to a minor for the next release in any case ?
Should we just add a deprecation notice in release notes of the next version if it's a patch version ?

I'm leaning towards the first option for cp313t.
The second option could be used to raise awareness for Python 3.8 removal and for which we probably don't want to show a warning for users that will be stuck producing Python 3.8 wheels for a while with the last version of cibuildwheel able to produce cp38 wheels.

@henryiii
Copy link
Copy Markdown
Contributor

If I get a chance to work on multi-wheel output (I might in 1-2 weeks), that would be a good feature for a new minor version.

@joerick
Copy link
Copy Markdown
Contributor

joerick commented Apr 1, 2026

Given the only functionality change here is the removal of cpython-freethreading from enable = "all", I'd be okay with pushing this out on a patch release. If we're only a month away from removing it entirely, and that variant has always been 'experimental', seems okay to me.

Free-Threading Python 3.13 was experimental.
Now that Python 3.14 has been released with explicit support, we can schedule removal of Python 3.13 free-threading.
@mayeut mayeut force-pushed the cpython-3.13t-deprecation branch from 7f5d182 to b06178f Compare April 1, 2026 21:14
@mayeut
Copy link
Copy Markdown
Member Author

mayeut commented Apr 2, 2026

I rebased / forced push with fixes to tests in order to get proper typing in there.

@joerick joerick merged commit 54b8a01 into pypa:main Apr 2, 2026
45 checks passed
@mayeut mayeut deleted the cpython-3.13t-deprecation branch April 2, 2026 20:22
@rgommers
Copy link
Copy Markdown

rgommers commented Apr 9, 2026

Hi, this seems perfectly fine in principle, however the timeline here seems very rushed. There are a lot of projects using this in both regular CI and in release scripts. Even when cibuildwheel itself is pinned, build dependencies (e.g., numpy) typically aren't. So removing cp313t builds out of order in an unplanned fashion is going to lead to some confusion and breakage.

An announcement on DPO and a slightly longer timeline so removals from CI across O(100) projects can be done systematically would be helpful.

I now realize that gh-2683 has been open for several months, but that had next to no visibility. If I didn't know about it (working on both Python packaging and free-threading), then I'm pretty sure that the vast majority of package authors that use this feature won't know yet.

@henryiii
Copy link
Copy Markdown
Contributor

henryiii commented Apr 9, 2026

We are starting with a deprecation warning, which should increase visibility.

@rgommers
Copy link
Copy Markdown

rgommers commented Apr 9, 2026

Yes, that just appeared. My comment is about the timeline for removal - manylinux set this at 5 May, and from this discussion it sounds like cibuildwheel will follow shortly after. That's about one month from announcement to full removal - very short. This is the bottom of the stack. I'm happy for my team to do a lot of the cleanup work, but 1 month (especially coinciding with CPython 3.15.0 beta1 which will have priority) is not ideal.

@henryiii
Copy link
Copy Markdown
Contributor

henryiii commented Apr 9, 2026

You can keep the old cibuildwheel, which will be pinned to an old manylinux, which will still have it. Though then you can't do beta one.

I think this would be doable for NumPy; the dev branch could drop 3.13t and add the beta, but it wouldn't release till rc1, which is much further away, and probably fine for 3.13t? Remember that was always experimental, unlike 3.14t.

I could see an argument that keeping it around a bit longer so that it doesn't collide with the addition of 3.15 - but I don't make decisions in manylinux. ;)

@joerick
Copy link
Copy Markdown
Contributor

joerick commented Apr 10, 2026

@rgommers thanks for chiming in. Sorry for causing a headache.

Even when cibuildwheel itself is pinned, build dependencies (e.g., numpy) typically aren't. So removing cp313t builds out of order in an unplanned fashion is going to lead to some confusion and breakage.

Just so that I understand, you'd rather that numpy dropped 313t before cibuildwheel? Or you'd rather that projects downstream of numpy had a chance to drop 313t before numpy is forced to?

@rgommers
Copy link
Copy Markdown

Or you'd rather that projects downstream of numpy had a chance to drop 313t before numpy is forced to?

Yes, this. It's best to go in reverse order through the whole dependency tree, to avoid getting builds from source (which will then likely fail). And sometimes PRs take a while before getting merged, some maintainers have questions, etc. We'll have to go through a good part of what's tracked at https://py-free-threading.github.io/tracking/.

CI failures aren't the end of the world, but we spent a lot of time asking maintainers to pretty please accept adding cp313t wheels, so I'd rather minimize any friction to not burn any goodwill.

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.

4 participants