Modernizing My Python Project Template

Faster dependency management and streamlined development workflow with uv

Setting up Python projects consistently has always been incredibly stupid.

Despite being touted as the go to language for new developers, the Python dev env setup is a mess.

Like many, I have hailed the arrival of uv as mana from heavin.

After working with Eugene Yan’s Python collaboration template, I found myself wanting to update it with tools that better reflect current development practices. The result is a modernized template that focuses on speed and reliability while reducing setup friction.

Python project template repo link

Core Updates

The most significant change is the switch to uv for dependency management. In practice, uv handles everything from virtual environments to package installation with noticeably better performance than traditional tools. This alone makes a substantial difference in day-to-day development.

The template now includes:

  • uv for fast, reliable dependency management
  • ruff for unified linting and formatting
  • mypy for static type checking
  • pytest with coverage reporting
  • Docker support with multi-service compose configuration
  • GitHub Actions for automated quality checks

Project Setup

The setup process is straightforward:

git clone git@github.com:safurrier/python-collab-template.git my-project
cd my-project
make init

The initialization handles the essentials - development environment, git setup, pre-commit hooks, and example code management. More importantly, it creates a consistent foundation that you can build on without having to revisit basic configuration issues.

Development Workflow

In practical terms, the template provides two key benefits: speed and consistency. The uv integration significantly reduces time spent on dependency management, while automated checks catch common issues before they make it into the codebase. All quality checks run with a single command (make check), and the same checks run automatically on GitHub with each push.

The template strikes a balance between being opinionated enough to be immediately useful while remaining flexible enough to adapt to different project needs. Check out the repository here.