Free-threaded Python is supported in 3.14, plus PEP 810 lazy imports and 14 new handbook pages
Python 3.14 is the first release where the free-threaded interpreter ships as officially supported under PEP 779. The handbook now has a tutorial for trying it with uv.
New on the handbook
- Try Free-Threaded Python with uv. Install both the standard and free-threaded 3.14 builds, run the same CPU-bound threaded benchmark on each, and watch the no-GIL build actually parallelize. A companion how-to covers adopting the build in a real uv project.
- Build a Python library with a Rust extension (or a C extension, or a C++ extension). Three new tutorials covering native extensions: maturin and PyO3 for Rust, cffi with a hand-rolled compile step for C, and scikit-build-core with CMake and pybind11 for C++.
- How to set up documentation for a Python package. Walks through Sphinx and MkDocs side by side, paired with six new reference pages: Sphinx, MkDocs, Furo, mkdocstrings, sphinx-autobuild, and Material for MkDocs.
- How to deploy a uv project to AWS Lambda. Walks the container-image, zip, and Lambda-layer flows. The zip and layer paths share a
uv export+uv pip install --targetrecipe; the container path uses Lambda's official Python base image. Cross-platform builds let a Mac or Windows dev box produce Lambda's Linux runtime artifact. - What is PEP 810? The new
lazykeyword shipped in Python 3.15 beta 1 on May 7. Short-running CLIs win the most (one measured tool dropped from 104 ms to 36 ms on--help); long-running servers benefit less because that startup cost amortizes over the process lifetime.
From the blog
- Lightning Got Owned: When
import lightningSteals Your Credentials. Two maliciouslightningreleases (2.6.2 and 2.6.3) shipped a daemon-thread payload that runs on import. PyPI quarantined the project the same day, but projects that depended onlightningand resolved to those versions during the window pulled the bad wheel. - Did pip 26 close the gap with uv? pip 26.0 added
--requirements-from-scriptfor installing PEP 723 inline-metadata dependencies and--uploaded-prior-to(uv's--exclude-newer). The post audits what's actually left in the gap. - Ruff Already Rewrites Your Python to Be More Idiomatic. 36 FURB rules sit behind an opt-in flag. Every one ships with an auto-fix that turns Python fossils (a
set.addloop, a manualremovesuffix) into a one-liner.
In the ecosystem
- ty 0.0.31 added a
--fixmode toty checkthat applies suggested fixes for diagnostics that have them. Five days later, 0.0.32 dimmed unreachable code in IDEs through the LSP. - Ruff 0.15.12 added preview support for
# ruff:file-ignoreand# ruff:ignoresuppression comments. The first silences rules across an entire module from one comment at the top of the file. - uv 0.11.9 picked up CPython 3.14.5rc1 and now statically links libpython on macOS to match Linux behavior.
One thing worth trying
Install the free-threaded build of Python 3.14 and confirm it really runs without the GIL. From any directory:
uv python install 3.14t
uv run --no-project --python 3.14t python -c 'import sys; print("GIL enabled?", sys._is_gil_enabled())'
The output is GIL enabled? False. The t suffix asks uv for the free-threaded variant, and uv keeps it side by side with your standard 3.14 install.
This handbook is free, independent, and ad-free. If it saves you time, sponsor it on GitHub.
Reply to this email. I read every response.
— Tim Hopper
Don't miss what's next. Subscribe to Python Developer Tooling Handbook:
Share this email:
Add a comment: