Python 3.15
python.org
[6 comments hidden]
I’m particularly proud that the cryptography project is already shipping a single abi3.abi3t wheel for each platform on Python 3.15 or newer. The GIL-enabled build and free-threaded build can both use the same wheel now, because PyObject is opaque.
If you want to learn more about this, I gave a talk at EuroPython this year on Python’s ABI and the road to building and releasing abi3t today. See https://youtu.be/An8lO29SxXE.
[hidden]
[2 comments hidden]
Just one question: any plans to promote APIs like PyUnstable_EnableTryIncRef() and PyUnstable_TryIncRef() into the limited API? So far we have found that these APIs are necessary to implement the weak-valued caches we've always used in the past: https://github.com/protocolbuffers/protobuf/blob/6559a9f9622...
[hidden]
I doubt PyUnstable APIs will get promoted directly to the limited API without at least a release or two in the regular version-specific API first.
That said, if you would be willing to start a thread on discourse describing your need and use-case, that is probably the first step to stabilizing the APIs you want. It may also turn out there’s an alternate way to get protobuf working.
Please do feel free to reach out privately. I’d love to be able to chat with people working on protobuf and grpcio, they come up reasonably often and it’s hard to get official updates from inside Google.
[5 comments hidden]
Edit: Digging in a bit, a lot of things are slightly bigger overall as you'd expect; but notably the documentation folder has gained two animated GIFs totaling over 10MB (which presumably don't compress too much further even with XZ) demonstrating "tachyon" (which presumably refers to the new sampling profiler, https://docs.python.org/3.15/library/profiling.sampling.html ). These seem to be screen captures from terminal sessions, which work well enough to illustrate what a TUI looks like, but are probably not all that informative about how to use it. I would have much preferred SVG diagrams based around static screenshots.
[6 comments hidden]
Yes lazy import! Finally!
[5 comments hidden]
[2 comments hidden]
also let me plug my work project, an analyser which will scan your code and see where it can safely enable lazy imports (tagged alpha, but we did our best to get a usable release out before 3.15 landed): https://github.com/Facebook/lifeguard
[4 comments hidden]
uvx --python 3.15 whatsnewt[3 comments hidden]
[2 comments hidden]
[hidden]
I’m glad this has finally been added, but I’ve been wondering since 3.6 why this wasn’t supported
[23 comments hidden]
1. Typescript + Javascript
2. Rust.
3. Python - because of data science and interactive apps.
Basically, everything that can be rewritten in Rust with or without AI will be rewritten in Rust with or without AI in coming decade.
Famous cases:
1. Some backends at 37 signals from Ruby to Rust.
2. Bun from Zig to Rust.
3. Git in transition.
4. Mold linker from C to Rust.
5. Biome
6. TailwindCSS CLI
And much much more. Even Python interpreter is in process of using Rust as the main language if I am not wrong.
[0]. https://github.com/kevincouton/awesome-rust-migrations#1
[9 comments hidden]
[hidden]
[hidden]
[3 comments hidden]
Check the overall layered architecture. That's nowhere AI. That's pure human ingenuity coupled with machine's raw horsepower to build on top.
And such people do need to read the code.
[hidden]
[3 comments hidden]
[2 comments hidden]
Rails was a convenient layer that made the time to market shorter. Now Basecamp as pretty much abandoned Rails. Don't think newer projects would be choosing Rails.
Same goes with React Native. Shopify abandoned it.
I see the same fate for Flutter. Many many frameworks and languages might get abandoned gradually. Add Qt to the list as well.
A lot would be erased and newer languages/frameworks won't gain any traction because AI wouldn't be proficient in them hence they are less liely to gain momentum.
That's the future, whether we like it or not.
[hidden]
[2 comments hidden]
[hidden]
[2 comments hidden]
Citation needed. Outside of 3rd party/unofficial (ai-driven) attempts, I haven’t seen any evidence that the core python team is definitively moving away using CPython/python
[hidden]
[hidden]
[2 comments hidden]
For that matter, the COBOL codebases are still out there.
> Even Python interpreter is in process of using Rust as the main language if I am not wrong.
They are beginning to take steps towards making it possible to include some Rust code. Nowhere near "using Rust as the main language". (Unless you're looking at alternate implementations, like the aptly named https://github.com/RustPython/RustPython .)
[hidden]
> PEP 814: Add frozendict built-in type
About damned time. These are little quality of life changes that I've wanted roughly forever. Glad to see them arriving.
[hidden]
Nice to see improvements here!
[6 comments hidden]
[5 comments hidden]
[hidden]
[hidden]
[2 comments hidden]
[hidden]
[3 comments hidden]
[2 comments hidden]
Take a look at https://github.com/Technologicat/mcpyrate for example
[hidden]
I ended up writing a custom package that expands on the one "macro" (really a small DSL) that does it very quickly, and uses the `.pth` import so it automatically loads, via entrypoint especially, rather than being a constant import in the files that uses the DSL.
`mcpyrate` looks very cool.
[2 comments hidden]
[4 comments hidden]
[hidden]
[hidden]
How Fast is Python 3.15?
[hidden]
[4 comments hidden]
This matters more for newer versions of Python which actually offer the constructs needed for it. Python 3.15 extends this with sentinel and enhancements to TypedDict.
[3 comments hidden]
My hunch: The LLM has already been trained on the library, already knows the types. The annotations are just wasted noise/tokens at this point. (Also, majority of python is untyped, so probably has better "training data")
[hidden]
To be clear, you mean that the LLM performs better at working with un-annotated code?
(If you were talking about the runtime performance of the same code with and without annotations, then it's actually pretty obvious. The bytecode compiler doesn't use them to perform optimizations, because they can validly be complete garbage; and it adds overhead to have runtime `__annotate__` and `__annotations__` attributes, calls to do-nothing functions like `typing.cast`, etc.)
[hidden]
Types improve clarity to humans. Types also prevent future bugs by disallowing incompatible modifications. If you're not religiously writing types in function signatures, you're not developing professional software, just throwaway janky unprofessional scripts. I suggest looking at the OpenAI package to see just how well typed it is.
simonw[30 comments hidden]
Here's the "what's new in Python 3.11" document: https://docs.python.org/3/whatsnew/3.11.html
ryandrake[15 comments hidden]
zahlman[4 comments hidden]
Even relatively conservative Linux distros, for example, will only leave you with an unsupported-by-the-core-devs system Python for a small fraction of the cycle. For example, Mint 21.x (which distributes Python 3.10) will be EOL at the end of next April.
ryandrake[3 comments hidden]
EOL doesn't mean the software vanishes from the face of the earth, although we seem to be quickly moving to a world where once the OS vendor EOLs a platform, developers take that as a signal to break everyone on that platform.
I know, open source = I'm not entitled to anything, which is why I say "wish" instead of "demand."
- Sad owner of an iPhone 7
StableAlkyne[hidden]
I don't think anyone™ goes out of their way to explicitly break things for old Python versions.
It's usually more like "oh cool I can make this code faster/more readable if I use this feature. I don't have to care about the old version anymore so I will do that."
If you really to super duper need a backport, you're in luck: python is an interpreted language whose source is in plaintext, on your local machine.
zahlman[hidden]
Okay, but that isn't happening here. There isn't even a real way Python developers could do that, even if they wanted to. That isn't how Python package management works.
When the developer wants to start using features from a new Python version, that requires a new release with a higher version number. The old one is still available, and all standard package tooling will restrict itself to the package versions compatible with your Python version. And the ecosystem standard is to restrict yourself, for current releases, to features available in currently supported Python versions (which is why Simon is talking about 3.11 features and not 3.15 ones, or even 3.12 ones).
wtallis[hidden]
simonw[6 comments hidden]
My policy is that if the Python version isn't supported then I don't have to take steps to support it either.
If you're stuck with 3.10 that's fine, you'll just be stuck with the versions of my packages that I released prior to October 2026.
Thankfully Python packaging has metadata which means "pip install X" will continue to get you the most recent release which is compatible with your Python version.
Realizing this is the thing that gave me the freedom to finally stop worrying about all of those stale installations.
joshheitzman[3 comments hidden]
That said, its fair enough to drop support for a particular version whenever you want. I'm merely pointing out that there other providers of Python interpreters that are both widely used and support older versions longer. Other folks mentioned OS distributed doing the same already, but personally I don't use the system interpreter and just leave it alone for whatever the distro needs it for.
simonw[2 comments hidden]
"Anaconda is ending support for Python 3.10 in October 2026."
The most notable holdouts are the various "enterprise" Linux distributions, see other comment: https://news.ycombinator.com/item?id=50021127#50023030
joshheitzman[hidden]
ciupicri[2 comments hidden]
Then why not just support Python >= 3.14 or whatever and that's it?
simonw[hidden]
nvme0n1p1[3 comments hidden]
wtallis[2 comments hidden]
If python interpreters masqueraded as versioned .so libraries, we probably wouldn't even be having this conversation, because having multiple versions of those lying around is ancient precedent.
zahlman[hidden]
You can in fact get them in pretty much that form (of course they also include a ton of .py files for the standard library); see https://github.com/astral-sh/python-build-standalone .
CJefferson[6 comments hidden]
While you can give people guidance to install a more up-to-date python, everything is much, much harder than the default experience that gives them 3.9.6 (and also once you have them running a custom version with uv or something, may as well just get them to install 3.15!)
simonw[hidden]
em500[3 comments hidden]
They still haven't gotten around to actually removing them (probably don't want to deal with support/complains), but keeping versions pinned to ancient versions will naturally nudge developers to take care of their own runtime requirements. (They do the same with bash, perl, ruby.)
[1] https://developer.apple.com/documentation/macos-release-note...
msla[hidden]
> on Solaris, unlike elsewhere, the packaging system is intended only for system components (and Solaris defines this narrowly), not additional software.
Which points to this:
https://web.archive.org/web/20110411135805/http://holyhandgr...
mrpippy[hidden]
Python 3.9 is still included in Xcode and the Command Line Tools, but not the OS itself. It’s only for running scripts (and for supporting LLDB I think), applications cannot link against it like they could with the old OS-bundled 2.7.
Python 3.9 is getting conspicuously old though, I was a bit surprised Apple didn’t update it in Xcode 27.
tcdent[hidden]
> may as well just get them to install 3.15
Exactly. If the project you're trying to run needs a certain version of Python, it's no concern of the system that you're running on, it's a concern of the environment you're running in.
C build environments and linked libraries don't do this, and it's one of the reasons why I am a fan of isolated Python environments. You can't get into dependency conflict resolution hell if the dependencies are defined by a single system.
HackerThemAll[2 comments hidden]
zahlman[hidden]
esafak[hidden]
zzzoom[5 comments hidden]
throw0101a[3 comments hidden]
* https://docs.redhat.com/en/documentation/red_hat_enterprise_...
As does RHEL9:
* https://docs.redhat.com/en/documentation/red_hat_enterprise_...
zzzoom[hidden]
And "support" doesn't mean you get the same package selection as the original:
dralley[hidden]
https://access.redhat.com/support/policy/updates/rhel-app-st...
The support lifecycles are divergent from the rest of the OS though. Only the base Python version gets full lifecycle support, the newer versions get refreshed occasionally and eventually fall out of support.
zahlman[hidden]
The distro may keep applying security patches to old Python versions but there are definitely limits to what's feasible. If you try to build 3.6 or earlier from source today you'll run into issues with getting an old enough OpenSSL version to be compatible (and then you're stuck with the problems of that version). Some of my old-version builds also seem to segfault whenever you try to use `ctypes` (including indirectly, which can happen in very surprising ways) and I haven't fully diagnosed that.
But developers who want to "participate in the ecosystem" are not going to have a fun time regardless, because their dependencies are not going to keep supporting older Python in newer package versions. On the other hand, your old hack scripts will usually still work in even much newer Python versions, unless you tripped on a standard library deprecation landmine or something (which generally only happens with much older stuff than the 5-year support window; see https://peps.python.org/pep-0594/ and check out the "Added in" column in the table).