Skip to content

Development Tools

Code Analysis

My recommended code analysis tools:

Why I recommend it:

  • Extremely fast linter written in Rust
  • Replaces multiple Python tools in one
  • Automatic code fixes for many rules
  • Highly configurable yet simple to use
  • Regular updates and active development

Key Features:

  • 🚀 10-100x faster than traditional linters
  • 🔄 Auto-fixes for many rules
  • 🔍 Comprehensive rule set
  • 🛠️ Configurable through pyproject.toml/ruff.toml
  • 📦 Built-in formatter (replaces black)

Note: Ruff can replace the following tools:

  • flake8 (style guide enforcement)
  • pylint (code analysis)
  • isort (import sorting)
  • black (formatting)
  • pyupgrade (Python upgrade syntax)
  • autoflake (unused imports removal)

Mypy

Why I recommend it:

  • Static type checking for Python
  • Catches type-related bugs early
  • Improves code maintainability
  • Great IDE integration

Key Features:

  • 🔍 Gradual typing support
  • ⚡ Incremental mode for faster checks
  • 🎯 Configurable strictness levels
  • 🔧 Extensive configuration options

Black

Why I recommend it:

  • The uncompromising code formatter
  • Removes style discussions from code review
  • Widely adopted in Python community
  • Deterministic output

Key Features:

  • 🎯 Zero configuration
  • ⚡ Fast formatting
  • 🤝 PEP 8 compliant
  • 🔧 Editor integration

Note: While Black is still widely used, consider using Ruff's formatter (ruff format) as a modern, faster alternative that provides the same formatting style.

Quick Example:

# Before Black:
my_list = [1,2,
    3,4
    ]
result = function_name(arg_one,arg_two,
    kwarg_one=None,kwarg_two=None)

# After Black:
my_list = [1, 2, 3, 4]
result = function_name(
    arg_one,
    arg_two,
    kwarg_one=None,
    kwarg_two=None,
)

Pre-commit

Why I recommend it:

  • Automates code quality checks
  • Ensures consistent code quality
  • Prevents bad commits
  • Language-agnostic

Key Features:

  • 🔄 Git hook management
  • 📦 Large hook ecosystem
  • ⚡ Parallel execution
  • 🔒 Cached runs for performance

Example .pre-commit-config.yaml:

repos:
- repo: https://github.com/astral-sh/ruff-pre-commit
  rev: v0.3.0
  hooks:
    - id: ruff
      args: [--fix]
    - id: ruff-format
- repo: https://github.com/pre-commit/mirrors-mypy
  rev: v1.8.0
  hooks:
    - id: mypy
      additional_dependencies: [types-all]

Package Management

My recommended package management tools:

Why I recommend it:

  • Lightning-fast package installer written in Rust
  • Drop-in replacement for pip/pip-tools
  • Modern dependency resolver
  • Seamless integration with pip ecosystem
  • Active development by Astral (Ruff creators)

Key Features:

  • 🚀 15-20x faster than pip
  • 📦 Compatible with pip, pip-tools workflow
  • 🔒 Deterministic builds
  • 🔄 Smart caching
  • 🛠️ Built-in venv management

Quick Example:

# Create and activate a virtual environment
uv venv
uv pip install -r requirements.txt

# Or use it with pip-tools style workflow
uv pip compile pyproject.toml -o requirements.txt

Poetry

Why it's notable:

  • Dependency management and packaging in one tool
  • Modern project management
  • Built-in virtual environment handling
  • Great for publishing packages

Key Features:

  • 📦 Dependency resolution
  • 🔒 Lock file for reproducible builds
  • 🚀 Publishing to PyPI
  • 🛠️ Project scaffolding

Build

Why it's notable:

  • Standard-compliant package builder
  • PEP 517 implementation
  • Simple and focused tool
  • Works with any build backend

Key Features:

  • 🏗️ PEP 517 compliance
  • 🔧 Backend agnostic
  • 📦 Isolated builds
  • 🚀 Simple interface

Wheel

Why it's notable:

  • Built distribution format standard
  • Faster installation than source distributions
  • Cross-platform compatibility
  • Industry standard

Key Features:

  • 📦 Binary distribution format
  • 🚀 Fast installation
  • 🔄 Cross-platform support
  • 🔧 PEP 427 compliance

Note: While all these tools are valuable, I particularly recommend UV for its exceptional speed and compatibility with existing workflows. It's a modern alternative that works seamlessly with traditional pip-based tooling while providing significant performance improvements.

Testing

My recommended testing tools:

Pytest

Why I recommend it:

  • Simple and readable test syntax
  • Powerful fixture system
  • Rich plugin ecosystem
  • Great error reporting
  • Industry standard for Python testing

Key Features:

  • 🌈 Beautiful test output
  • 📚 Rich assertion messages
  • 🔧 Powerful fixture system
  • 🔗 Extensive plugin ecosystem
  • 📈 Parameterized testing

Quick Example:

def test_addition():
    assert 1 + 1 == 2

@pytest.fixture
def user():
    return {"name": "John", "age": 30}

def test_user(user):
    assert user["age"] == 30

Tox

Why I recommend it:

  • Test automation and standardization
  • Multi-environment testing
  • CI/CD integration
  • Virtual environment management

Key Features:

  • 📦 Isolated build environments
  • 🔄 Multi-Python version testing
  • 🔧 Configuration via tox.ini
  • 💻 CI/CD friendly

Coverage

Why I recommend it:

  • Code coverage measurement
  • Detailed coverage reports
  • Integration with pytest
  • Identifies untested code

Key Features:

  • 📈 Coverage measurement
  • 📊 HTML reports
  • 🔍 Branch coverage
  • 🛠️ Configuration options

Faker

Why I recommend it:

  • Generate realistic test data
  • Multiple data providers
  • Consistent fake data
  • Great for testing and demos

Key Features:

  • 📃 Realistic data generation
  • 🌎 Multiple locales
  • 🔄 Reproducible results
  • 💻 Easy to extend

Quick Example:

from faker import Faker

fake = Faker()

def test_user_creation():
    user = {
        "name": fake.name(),
        "email": fake.email(),
        "address": fake.address()
    }
    assert "@" in user["email"]

Documentation

My recommended documentation tools:

MkDocs Material

Why I recommend it:

  • Beautiful, modern documentation theme for MkDocs
  • Feature-rich with search, dark mode, code highlighting
  • Markdown-friendly with extensive formatting options
  • Perfect for technical documentation
  • Active development and great community

Key Features:

  • 🎨 Multiple color schemes and dark mode
  • 🔍 Built-in search
  • 📱 Responsive design
  • 💻 Code highlighting with copy button
  • 🔗 Auto-generated navigation
  • 📊 Diagrams support
  • 🔒 Versioning support

Project Scaffolding

My recommended project scaffolding tools:

Cookiecutter

Why I recommend it:

  • Project template engine
  • Consistent project structures
  • Large template ecosystem
  • Language-agnostic

Key Features:

  • 🍳 Template-based scaffolding
  • 📚 Rich template context
  • 🔧 Customizable options
  • 📦 Pre/post hooks

Quick Example:

# Create a Python package project
cookiecutter gh:audreyr/cookiecutter-pypackage

# Create a FastAPI project
cookiecutter gh:tiangolo/full-stack-fastapi-postgresql