Last month was a watershed moment for Python. Python 3.14 beta 3, released mid-June, isn’t just another pre-release. It’s the first build in which the long-awaited free-threaded or “no-GIL” variant is officially supported. That’s right: a no-GIL Python is finally taking shape.
The interpreter isn’t the only thing making headlines, though.
Below you’ll find a curated tour of the latest Python developments, broken down by area so you can zero in on your favorite topic.
Join Now: Click here to join the Real Python Newsletter and you'll never miss another Python tutorial, course, or news update.
Core Python Development
CPython’s core improved in concurrency and stability last month. The third beta of Python 3.14 now officially supports the no-GIL build for CPython, signaling a new era of multi-core Python. That same release also brought multiple interpreters into the standard library, while earlier in June, the core team rolled out a coordinated batch of security patches across all maintained versions to keep your deployments safe.
Python 3.14 Beta 3 Lands Free-Threaded Support
On June 17, the release team pushed Python 3.14.0b3 to the mirrors. What sets this beta apart is the acceptance of PEP 779, which promotes the GIL-less build from experimental to supported. That single status change means binary wheels, continuous integration images, and even hosting platforms can start treating free-threaded Python as a first-class citizen.
Why is that a big deal? The Global Interpreter Lock (GIL) has long limited Python’s ability to use multiple CPU cores effectively. With a supported no-GIL build, data science and high-throughput web workloads can reach for true multithreading without resorting to subprocess orchestration.
While this is exciting, many caveats remain. Native extensions must be rebuilt, and performance trade-offs still exist. Still, the road to production looks increasingly well paved, and the Python community can start preparing for Phase III, which would make the free-threaded build the default.
Multiple Interpreters Join the Standard Library
Beta 3 also finalizes another language proposal with PEP 734 – Multiple Interpreters in the Stdlib. This PEP supersedes PEP 554 and adds Python subinterpreters to the standard library via the concurrent.interpreters
module. This addition hoists the ability to run multiple interpreters from the C API up to the standard library, paving the way to making this approach to concurrency more popular in the Python ecosystem.
Together with earlier additions like t-string literals, Python 3.14 is shaping up to be a feature-packed release when it ships this October.
Coordinated Security Releases Ensure Safety
If you maintain anything on a Long-Term Support (LTS) Python version, then block off some time to upgrade. Earlier last month, the core team released fixes for multiple tarfile CVE identifiers and an ipaddress
memory bug across all supported branches: 3.13.4, 3.12.11, 3.11.13, 3.10.18, and 3.9.23. If you think this might affect you, then read the full details on the Python Insider blog.
And—as it sometimes goes in life and software—just a week later, Python 3.13.5 shipped to fix regressions introduced by 3.13.4. These included, most notably, a Windows build failure for C extensions and unintended delays when raising TypeError
exceptions in generators. If you’re on the 3.13 series, then you can upgrade directly to 3.13.5.
Library and Tooling Highlights
From data science to web development, Python’s ecosystem is keeping pace with the core language’s progress.
Last month saw key libraries modernize and improve performance, with NumPy and scikit-learn adding support for Python’s free-threaded future. Also, pandas debated a big default change for faster DataFrames, and Django issued a quick security patch.
On the tooling front, a wave of Rust-powered Python developer tools continues to accelerate everything from linting to type checking.
NumPy 2.3.0 Improves Compatibility With the Free-Threaded Interpreter
Released on June 7, NumPy 2.3.0 continues the project’s push for modernization. Besides better type annotations and preliminary Windows-on-ARM wheels, the main highlight is improved compatibility with the free-threaded interpreter. If you’re experimenting with no-GIL Python, you can now bring trusty ndarray
-based workflows along for the ride.
pandas Prepares for PyArrow by Default
The pandas team has been debating whether version 3.0 should make PyArrow-backed dtypes the default. The proposal promises less memory consumption, performance gains, and better interoperability with tools like DuckDB, Polars, and Spark. But it also sparks migration concerns.
It’s likely that a toggle will be available to opt out of default PyArrow data types before full adoption:
import pandas as pd
pd.options.mode.use_arrow = False
That said, the discussion is still ongoing, and the issue remains open for now. If this topic concerns you, then be sure to check back for updates in next month’s newsletter.
Django Applies Security Patch 5.2.2
Web developers got a nudge last month when the Django team issued Django 5.2.2, 5.1.10, and 4.2.22 to address CVE-2025-48432, a low-severity log-injection vector.
If you’re working with any of the affected versions, such as Django 5.2.1, then go ahead and upgrade by running this command:
(venv) $ python -m pip install --upgrade django==5.2.2
It’s worth applying this upgrade before your logs become a playground for mischievous control characters.
scikit-learn 1.7 Integrates Experimental GPU Support
Machine learning practitioners can now access the newly minted scikit-learn 1.7. This release allows you to use the ongoing, experimental Array API work without needing to install the array-api-compat
module.
To enable Array API support, you need to set a dedicated environment variable:
(venv) $ export SCIPY_ARRAY_API=1
With this in place, your scikit-learn linear models can now accept CuPy or PyTorch tensors and run on the GPU without the need for a CUDA-specific fork.
Rust-Powered Developer Tools Keep Accelerating
Ruff 0.12 dropped on June 12, adding better support for multiple Python versions and a slight change in how it formats f-strings. If lightning-fast linting is up your alley, then check out the full release post on Astral’s blog.
While you’re on Astral’s website, you can also check out their new type checker ty, which just hit version 0.0.1-alpha.12. Recent alpha releases have made improvements such as stabilizing autocompletion and improving data class support.
There’s also more Rust in other shiny new objects! Last month, Meta entered the chat with Pyrefly, a Rust-based successor to Pyre designed for lightning-fast, incremental analysis across monorepos.
Taken together, these projects suggest that 2025 may be remembered as the year when Python tooling in Rust stopped being a novelty and became table stakes.
Python Community News
Big-picture discussions and community milestones are in the spotlight. And with summer events and calls for proposals in full swing, Python’s conference calendar is heating up.
Python Language Summit 2025
A series of blog posts from the Python Software Foundation (PSF) recapped the Python Language Summit held on May 14 before PyCon US in Pittsburgh. The overarching theme was concurrency, with sessions on the state of free-threaded Python, subinterpreter APIs, and even early musings on Java-style virtual threads.
PSF 2024 Impact Report
Last month, the PSF published its 2024 Annual Impact Report. Highlights from 2024 include record-breaking fundraising, the hiring of a Maria Ashna as PyPI support specialist, and an ever-growing grants program that funded many community events on six continents:

Some may say that summer is the perfect time for an optimistic recap of the previous year, so grab a cold drink and revisit the key developments in the PSF and the Python community with this short, well-designed report.
Conferences and Calls for Proposals
Python’s event calendar is humming again:
- AfroPython Conf 2025 lit up Salvador, Brazil, on June 7 with tracks spanning education, social impact, and hardware hacking.
- PyBay 2025 has closed its call for proposals, and the talk schedule will be posted next month.
- JupyterCon 2025 is still accepting talk proposals, so make sure to remember the deadline.
If you’ve never spoken at a conference before, then regional events can be a welcoming place to start.
Real Python Roundup
As usual, Real Python published a steady stream of learning resources last month.
Learn with seven sparkling new or solidly updated tutorials, ranging from a comprehensive guide by Leodanis Pozo Ramos on everything you need to know about Defining Your Own Python Function to taming audio with TorchAudio by Negar Vahid.
You might begin with How Can You Structure Your Python Script? by first-time Real Python author Rohit Goswami, then move on to Write Pythonic and Clean Code With namedtuple
:
- How Can You Structure Your Python Script?
- How to Find an Absolute Value in Python
- Write Pythonic and Clean Code With
namedtuple
- Defining Your Own Python Function
- Python
enumerate()
: Simplify Loops That Need Counters - Your Guide to the Python
print()
Function - Use TorchAudio to Prepare Audio Data for Deep Learning
If you prefer learning from a friendly voice, then check out four of our recent video courses. Let Philipp Acsany show you how to get started with GitHub Actions, dive deep into Python’s list
data type with Joseph Peart, and more:
Ready to prove that you’ve mastered absolute values, nested loops, and Polar’s .group_by()
? You can test your knowledge with quizzes by Bartosz Zaczyński, Ian Eyre, and others:
- How Can You Structure Your Python Script?
- How to Find an Absolute Value in Python
- Defining Your Own Python Function
- How to Group Data Using Polars
.group_by()
- Nested Loops in Python
- marimo: A Reactive, Reproducible Notebook
- Control Flow Structures in Python
- The Python
print()
Function - Use TorchAudio to Prepare Audio Data for Deep Learning
Among the usual wave of tutorials, video courses, and quizzes is a new coding challenge pioneered by Bartosz Zaczyński. If you’re curious and want to hone your skills with a meticulously crafted coding challenge, then check out Python Project: Build a Word Count Command-Line App and leave us feedback about how you like the format.
Your host Christopher Bailey from The Real Python Podcast published five new episodes that you can find on your favorite podcast player, or with the direct links below:
- Episode 251: Python Thread Safety & Managing Projects With
uv
- Episode 252: Rodrigo Girão Serrão: Python Training, itertools, and Idioms
- Episode 253: Starting With marimo Notebooks & Python App Config Management
- Episode 254: Scaling Python Web Applications With Kubernetes and Karpenter
- Episode 255: Structuring Python Scripts & Exciting Non-LLM Software Trends
Even if you missed these resources in real time, now’s a great chance to catch up and explore something new.
But that’s not all. Leodanis Pozo Ramos continues to build out Real Python’s new Reference area, a growing library of quick references to help you understand core concepts at a glance. Each entry links to in-depth tutorials, courses, and quizzes so you can go as deep as you like.
And in the classroom, Stephen Gruppetta wrapped up teaching the latest two cohorts of Real Python’s 8-week Intermediate Python Deep Dive live cohort course. Based on the feedback, participants loved it:
“The course structure and delivery were perfect. Learnt a lot to make me a better programmer.”
“Besides the greater depth of understanding that I learnt from this course, one thing that stood out for me is I’m able to think through problems in a better and more pragmatic way.”
“I feel like I’ve got a whole new view on Python now. I now look at things as objects that have capabilities, that can do stuff (and know how to implement those, how it’s all just dunder methods under the hood), rather than as objects that are of some type.”
If you feel stuck in a moat of intermediate programming concepts and a mix of self-study and live online sessions sounds appealing, then check out Real Python’s course offerings to help you reach the next level.
Looking Ahead
Python 3.14’s beta 4—the final beta before the release-candidate phase—drops on July 8. Expect a flurry of no-GIL binary wheels once the ABI is locked in. Library maintainers will continue chasing free-threaded compatibility, and packaging discussions around PyArrow and pandas 3.0 may reach a decision.
Until then, keep your environments patched, your linters up to date, and, most importantly, enjoy the craft of coding! Happy Pythoning!
Join Now: Click here to join the Real Python Newsletter and you'll never miss another Python tutorial, course, or news update.