Python Developer Tooling Handbook logo

Python Developer Tooling Handbook

Archives
May 8, 2026

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 --target recipe; 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 lazy keyword 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 lightning Steals Your Credentials. Two malicious lightning releases (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 on lightning and 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-script for 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.add loop, a manual removesuffix) into a one-liner.

In the ecosystem

  • ty 0.0.31 added a --fix mode to ty check that 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-ignore and # ruff:ignore suppression 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:

Add a comment:

Share this email:
Share on Twitter Share on LinkedIn Share on Hacker News Share on Reddit Share via email
book
Twitter
LinkedIn
tdhopper.com
Powered by Buttondown, the easiest way to start and grow your newsletter.