Introduction to the Python Developer Tooling Handbook
👋 Hey, I’m Tim Hopper! I’ve been a professional Python developer for over a decade. Like many Python developers, I’ve faced the many challenges of Python packaging and dependency management. I’ve also come to love helping developers find the right tools to make their work easier and more productive.
I am currently writing a free ebook on Python developer tooling. This isn’t a book about Python programming. 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 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.
This handbook covers a wide range of other topics:
- Linting: What’s the difference between flake8, pylint, and ruff? What do you recommend?
- Type Checking: What’s the difference between mypy, pyright, and pyre? Which should you choose?
- Formatting: Why is everyone talking about ruff-format? How do I get started with it?
- Dependency Management: Overwhelmed by pip, poetry, and conda? I’ll help you make sense of it all.
- Virtual Environments: What are they and why should you use them?
If there are any topics you’d like to see covered in the handbook, please use the feedback form.
Astral, Charlie Marsh's company best known for Ruff, announced uv today, 'an extremely fast Python package installer and resolver, written in Rust.'
February 16, 2024
Modern Python developers have a plethora of tooling available to help the development process. When I started with Python in 2011, packaging was done with setuptools (or its predecessor distutils), and virtual environments were created with the virtualenv library. Now developers can (have to?) choose between a breadth of packaging tools (e.g., setuptools, Flit, Poetry, PDM, Hatch). Some of these tools manage virtual environments while others require the developer to do this themself.
February 14, 2024
I’d like to release the first edition of the Python Developer Tooling Handbook in 2024. This project is a labor of love from me to the Python community. If you’ve ever struggled with Python packaging or dependency management, please consider sponsoring the project on Github.
February 14, 2024
Along with the Python Packaging User Guide, another excellent resource for learning about Python development practice is the Scientific Python Library Development Guide, a “guide is maintained by the scientific Python community for the benefit of fellow scientists and research software engineers”. I especially like their topical guides on topics like packaging and getting started with Github Actions.
February 12, 2024
In the last few years, Python packaging has seen a lot of change. Instead of every project using setuptools/setup.py, there are now many tools to choose from when building and distributing Python packages. This can be overwhelming for new and experienced developers alike. My goal with the Python Developer Tooling Handbook is to help you make informed choices to make your Python development easier and more productive. As I’ve tried to learn the ins-and-outs of these tools, I created a series of example repositories showing how to use each of the major packaging tools.
February 6, 2024
Python developers (and hobbyists) often hear the advice not to use the preinstalled “system” Python on a Mac. When looking into alternatives, it’s easy to get overwhelmed by all the options: python.org installers, Homebrew, pyenv, conda, pyflow, rye, and more. My forthcoming ebook is designed to help you make informed choices about Python development and let you focus on writing code instead of managing your development environment. In the meantime, I’ll point you to Dylan Stein’s excellent Quick start guide for Python development on a Mac.
February 5, 2024
The Python Packaging Authority produces an excellent resource called the Python Packaging User Guide, “a collection of tutorials and references to help you distribute and install Python packages with modern tools”. If you’re feeling frustrated by Python packaging, I highly recommend reading through this guide and considering it’s suggestions. My forthcoming Python Developer Tooling Handbook will cover much of the same material, but it intended as a complement to the Python Packaging User Guide, not a replacement.
February 3, 2024
Armin Ronacher’s Rye is an exciting new tool in the Python packaging and dependency management ecosystem. Rye attempts to be a “one-stop-shop” to “to install and manages Python installations, pyproject.toml based projects, dependencies and virtualenvs seamlessly”. You can read more about the Rye philosophy here. Armin recently recorded an introduction to the tool with the release of version 0.21:
February 3, 2024