Python This Week — July 20, 2026: The Final 3.15 Beta Lands in Kraków
Python 3.15.0b4 shipped from the EuroPython sprints on July 18, closing the beta phase. Plus a new PEP from Guido van Rossum on class-scope name resolution, the JIT's six-month clock, and a PSF election deadline you shouldn't miss.
A busy week for Python, with most of the action radiating out of Kraków, where EuroPython 2026 and the core team's sprints ran back-to-back. Here's what actually changed between July 13 and July 20, 2026.
Python 3.15.0 beta 4 closes the beta phase
Release manager Hugo van Kemenade shipped Python 3.15.0b4 on July 18 — the final planned beta, carrying roughly 298 bugfixes, build improvements and documentation changes since b3. The release team signed off "from the sunny EuroPython sprints in Kraków." The goal from here is no ABI changes at all, so if you maintain a third-party package, this is the build to test against and to cut pre-release wheels from. The release candidate phase opens August 4, with the final release due this fall. source
What's actually landing in 3.15
With the feature set frozen, the 3.15 headline list is settled: explicit lazy imports (PEP 810), a built-in frozendict (PEP 814), a built-in sentinel type (PEP 661), UTF-8 as the default encoding at last (PEP 686), unpacking in comprehensions (PEP 798), frame pointers on by default (PEP 831), and the new Tachyon high-frequency sampling profiler (PEP 799). The upgraded JIT posts an 8–9% geometric-mean gain on x86-64 Linux and 12–13% on AArch64 macOS. source
EuroPython 2026 and the Language Summit
EuroPython ran July 13–19 at the ICE Kraków Congress Centre, marking the conference's 25th anniversary with keynotes from Guido van Rossum, Pablo Galindo Salgado and Łukasz Langa. The invitation-only Python Language Summit opened the week on July 14, co-chaired by Emily Morehouse-Valcarcel, Hugo van Kemenade, Lysandros Nikolaou and Łukasz Langa, bringing together maintainers from CPython, PyPy, MicroPython, GraalPython and other implementations. Talk recordings typically go online in the weeks after. source
PEP 840 takes on a long-standing scoping wart
Jeremy Hylton and Guido van Rossum filed PEP 840, "Name Resolution in Class Namespaces," on July 15, with discussion opening the next day. It targets an inconsistency that has been on the books since at least 2002: inside a class body, a name used before assignment falls back to globals, but the same name in a nested function would resolve to the enclosing scope. The PEP lays out three candidate fixes rather than picking one — raise NameError like function scopes do, fall back to globals for unbound free variables, or fall back through the full enclosing-scope chain. It targets Python 3.16 and is squarely at the "help us decide" stage. source
The JIT's six-month clock keeps ticking
Context for anyone catching up: in June the Steering Council froze new JIT work in CPython's main and gave the project roughly six months to produce an accepted standards-track PEP, or the code comes back out. Savannah Ostrowski, Brandt Bucher and Ken Jin answered on July 2 with PEP 836, "JIT Go Brrr", which sets measurable targets for performance, tooling, platform support and maintenance — including a 20% geometric-mean improvement for Python 3.17 with JIT plus free threading, measured against the free-threading interpreter alone. It remains in Draft and the Discourse thread stayed active through this week. source
PEP 835 wants to shorten your Annotated types
Still drawing heavy discussion: PEP 835 proposes T @ Metadata as shorthand for Annotated[T, Metadata]. The motivation is practical — Pydantic and FastAPI now steer users toward Annotated over metadata in default values, at a real cost in verbosity. The @ operator binds tighter than |, and chained metadata flattens exactly as nested Annotated does. The existing spelling stays valid and entirely equivalent. source
PSF members: affirm your vote before August 25
The PSF posted a reminder on July 15 that every voting-eligible member — Supporting, Contributing, or Fellow — must affirm their intention to vote by Tuesday, August 25, 2:00 pm UTC. This year there are two ballots: the PSF Board election and the inaugural Python Packaging Council election created by PEP 772. Voting runs September 1–15. If you voted last year you're rolled over automatically, but a changed email address on psfmember.org can break that. Board nominations open July 28. source
That's the week. Install the beta, test your packages, and we'll see you next Monday.