Learn Python with Talk Python's 270 hours of courses

Hatch: A Modern Python Workflow

Episode #408, published Fri, Mar 24, 2023, recorded Wed, Mar 1, 2023

In recent years, there has been a lot of experimenting how we work with dependencies and external libraries for our Python code. There is pip, pip-tools, Poetry, pdm, pyenv, pipenv, Hatch and others workflows. We dove into this deeply back on episode 406: Reimagining Python's Packaging Workflows. We're back with Ofek Lev to take a deeper look at Hatch.


Watch this episode on YouTube
Play on YouTube
Watch the live stream version

Episode Deep Dive

Guests introduction and background

Ofek Lev is the author and maintainer of Hatch and Hatchling, popular Python packaging and workflow tools. He works at Datadog, focusing on agent integrations and monitoring. Ofek originally started coding to automate daily tasks, creating scripts for email templates and other repetitive actions. Over time, that automation mindset grew into deeper involvement with the Python community, culminating in the modern packaging workflow tool we know as Hatch.

What to Know If You're New to Python

Before diving into the intricacies of Hatch and Python packaging, here are a few foundational pointers to make the conversation more accessible:

  • Be aware of virtual environments. They isolate your Python packages so they don’t conflict with each other.
  • Recognize pip is the standard tool for installing external libraries, but there are higher-level workflows that build on it.
  • Understanding a basic project structure (folders, __init__.py, and the pyproject.toml file) will help you follow how Hatch organizes things.

Key points and takeaways

  1. Hatch’s Role in Modern Python Packaging Hatch is positioned as a comprehensive solution for creating, managing, and publishing Python packages. It brings together environment management, versioning, and publishing under one tool, striving for simplicity but also power.
  2. Hatch vs. Other Tools The Python ecosystem has many packaging and environment tools (pip, Poetry, Pipenv, pdm, etc.). Hatch differentiates itself with automatic environment syncing, easy version bumping, and a plugin system allowing for specialized builds or integrations.
  3. Environment Management Made Easy Hatch automatically creates and synchronizes virtual environments on your behalf. You can enter a shell (hatch shell) or run commands within the project (hatch run) without manually creating or activating a venv.
  4. “Hatch New” for Project Bootstrapping With hatch new <project_name>, you get a quickstart layout: a package folder, pyproject.toml, test directory, and default environment settings. This accelerates setting up consistent folder structures and default testing configurations.
  5. Version Bumping and Release Workflow Hatch supports versioning commands like hatch version minor or hatch version rc to update versions automatically. Building (hatch build) then creates both wheels and source distributions, while hatch publish simplifies publishing to PyPI or private indexes.
  6. Lock Files and Future Enhancements While Hatch doesn’t currently ship with its own lock file solution, Ofek emphasized that a plugin interface for locking is in active development. This will allow deeper reproducibility and align with popular tools like pip-tools.
  7. Plugin Ecosystem and Builders Hatch’s plugin interface powers custom build targets, such as building with MyPyC or for Jupyter extensions. Third-party plugins can hook into Hatch’s workflow, extending beyond just wheels and source distributions.
  8. Adoption by Large Projects Jupyter’s extension system recently standardized on Hatchling, highlighting Hatch’s growing acceptance. This recognition by major open-source projects validates Hatch’s reliability and developer-friendly approach.
  9. New Features on the Horizon Ofek plans to introduce “workspaces,” inspired by Cargo in Rust, to better support monorepos with multiple projects. This would simplify collaborative and large-scale development scenarios in one repository.
  10. Speed and Simplicity by Design Hatch uses lazy imports and other techniques under the hood for a faster CLI experience, often outperforming alternative packaging tools. This focus on both speed and simplicity helps new and seasoned developers alike.

Interesting quotes and stories

  • On Why Packaging Tools Matter: One user in the chat mentioned, “I switched to Hatch and pip-tools from poetry and love it.” This sentiment highlights how the right tooling can dramatically improve developer experience.
  • Ofek’s Personal Journey: Ofek started automating tasks because typing was physically challenging, eventually building Hatch as an expression of his belief in removing repetitive manual work for everyone.

Key definitions and terms

  • pyproject.toml: A central configuration file introduced in PEP 518, storing metadata like dependencies, build settings, and more.
  • Wheel: A built (binary) distribution format for Python packages, offering faster and more consistent installs than source distributions.
  • Virtual environment: A self-contained directory tree that contains its own Python installation plus dependencies, isolating it from system-level packages.
  • Plugin: In Hatch context, a mechanism allowing external tools to hook into the build or publishing workflow.

Learning resources

For listeners who want a deeper dive into Python development and packaging, here are some related materials:

  • Modern Python Projects: Create Python packages with modern tooling, learn about project organization, and discover best practices for versioning and dependencies.
  • Getting started with pytest: Learn about testing your packages effectively, since Hatch seamlessly integrates with pytest.

Overall takeaway

Hatch aims to unify core workflows—building, publishing, environment handling, and versioning—into one polished command-line tool. It focuses on simplifying packaging while still offering extensibility through plugins. With upcoming features like lock files and workspaces, Hatch looks poised to become even more compelling for Python developers wanting a single tool that just works. If you’re looking to streamline your packaging experience and accelerate your development process, Hatch is an exciting choice to explore.

Links from the show

Hatch: hatch.pypa.io
Ofek on Twitter: @Ofekmeister
Mamba: github.com
Hatch env management: hatch.pypa.io
Packaging a Python project tutorial: packaging.python.org
Customize project generation: hatch.pypa.io
Textual: textualize.io
Ruff on Talk Python: talkpython.fm
RustUp: rustup.rs
Conda: docs.conda.io
import antigravity: xkcd.com
Watch this episode on YouTube: youtube.com
Episode transcripts: talkpython.fm

--- Stay in touch with us ---
Subscribe to Talk Python on YouTube: youtube.com
Talk Python on Bluesky: @talkpython.fm at bsky.app
Talk Python on Mastodon: talkpython
Michael on Bluesky: @mkennedy.codes at bsky.app
Michael on Mastodon: mkennedy

Talk Python's Mastodon Michael Kennedy's Mastodon