Python Developer Tooling Handbook

This is not a book about programming Python. Instead, the goal of this book is to help you understand the ecosystem of tools used to make Python development easier and more productive. For example, this book will help you make sense of the complex world of building Python packages: what exactly are uv, Poetry, Flit, Setuptools, and Hatch? What are the pros and cons of each? How do they compare to each other? It also covers tools for linting, formatting, and managing dependencies.

The handbook is structured according to the Diátaxis framework. There are four primary sections:

  1. Tutorial: This section provides step-by-step guides to help you get started in improving your Python development experience.
  2. How To: This section help you get things done in your Python project.
  3. Explanation: This section provides in-depth explanations to deepen your understanding Python development.
  4. Reference: This section provides detailed information about specific tools and concepts in Python development.

The book does not attempt to replace the documentation available for various tools; a link to the documentation for each tool is available on its Reference page. Also, the handbook is meant to complement, not replace, the Python Packaging Authority’s excellent Python Packaging User Guide.

This book is a work in progress and will be updated regularly. If you have any suggestions or feedback, please feel free to use the feedback form at the bottom of any page page.

Tim Hopper
Raleigh, North Carolina

ℹ️
Please sign up for the mailing list to receive updates on Python Developer Tooling Handbook.

Recent Blog Posts

Use Interceptors to teach Claude Code to use uv

July 28, 2025

AI coding agents like Claude Code, Cursor, or GitHub Copilot often default to using system Python interpreters instead of using uv.

Armin Ronacher, creator of Flask and Jinja, shared an elegant solution to this problem: creating dummy Python interpreter that actively redirect AI agents toward better tooling choices.

Tip

uvhow: Get uv upgrade instructions for your uv install

July 22, 2025

I’ve released uvhow, a simple command-line tool that detects how uv was installed on your system and provides the correct upgrade instructions.

uv can be installed through multiple methods. When it’s time to upgrade, users often struggle to remember which installation method they used, leading to confusion about the correct upgrade command.

uvhow automatically detects your uv installation method and tells you exactly how to upgrade:

uvx uvhow

The tool works across Windows, macOS, and Linux and supports all major installation methods including:

uv 0.8 Release: Automatic Python Installation to PATH

July 19, 2025

uv 0.8 stabilizes one of the most significant workflow improvements in Python tooling: automatic installation of Python executables to your PATH. This means you can finally install Python versions with uv python install and use them system-wide without wrestling with environment activation.

Python is good now!

July 16, 2025

I love César Soto Valero’s recent post I’m Switching to Python and Actually Liking It.

To my great surprise, I’ve found that Python, and everything around it, has really improved a lot over the last decades.

Here are just three examples:

  1. Python has created a very complete ecosystem of libraries and tools for processing and analyzing data.
  2. Python has gotten faster with optimized static compilers like Cython.
  3. Python has done a good job of hiding its legacy ugliness (such as __init__, __new__, and similar aberrations), sweetening its syntax to accommodate developers with good taste.

Read the whole post.

Why isn't Python packaging part of core development?

July 16, 2025

bitecode.dev just posted a massive video interview with Python core dev Brett Cannon. Among many other things, Brett explains why Python packaging hasn’t been part of Python core development:

Basically, they’re separate because Guido doesn’t care about packaging. That’s really what it comes down to. When packaging started to become a thing, we just didn’t have any interest in it, and so it never became a core dev concern. It just never came up—it was just not our thing. So the community in various ways stepped up to fill that void.

Hynek Schlawack's uv Workflow Guide

July 7, 2025

Hynek Schlawack’s new video “uv: Making Python Local Workflows FAST and BORING in 2025” demonstrates practical uv workflows using real examples.

He covers:

  • Replacing pip/virtualenv/pyenv with a single tool
  • Dependency management and lock files
  • Testing and linting integration
  • just integration for cross-platform commands

If you missed Part 1 of Hynek’s series, it’s available here.

The uv build backend is now stable

July 3, 2025

For about a year, uv has had a uv build command for generating distributable wheels and source distributions on pypi and elsewhere.

However, uv has relied on other tools for the build backend, i.e. the actual piece constructing the wheel or sdist as defined by PEP 517. By default, uv uses hatchling as the build backend.

As of this week, the uv team has now declared the uv build backend as stable and, most notably, really, really fast. Charlie Marsh’s benchmarks suggest that it’s 10 to 35 times faster than flit, hatchling, and setuptools. While I’ve never really needed my package builds to be faster, I’ve learned that faster tools often enable new things I didn’t imagine possible; I’m interested to see what those might be here.

Managing Python Versions In Your uv Projects

June 25, 2025

One of the many ways the package manager uv has changed Python is by making it painless to install and run different versions of the Python interpreter.

That said, I’ve occasionally gotten tripped up configuring this correctly in my development environments. I’ve written a few articles to try to clarify things:

  1. What is a .python-version file? Not unique to uv, a .python-version file specifies which Python version should be used for a particular project or directory.
  2. .python-version vs requires-python in pyproject.toml. The former is for development environments, while the latter is for package metadata.
  3. How to change the python version of a uv project. If uv run isn’t using the version of Python you expected or wanted, here is what you can do.

The goal of the handbook is to help you understand the ecosystem of tools used to make Python development easier and more productive. What are some missing topics you’d like to see included?

Comparison of the Two New Typecheckers

May 28, 2025

At PyCon 2025’s Typing Summit, participants were given a first look at Meta’s Pyrefly and Astral’s ty, two new Python type checkers that promise dramatically faster, more powerful type analysis.

Edward Li helpfully took notes and provided a right-up.

Here are some takeaways:

  • Both tools are blazingly fast

    • Pyrefly claims up to 1.8 million lines/sec (35× faster than Pyre, 14× faster than MyPy/Pyright), while ty benchmarks show it running 2–3× faster than Pyrefly on real-world codebases.
  • The tools have distinct philosophies

Last updated on

Please submit corrections and feedback...