The Python tooling landscape consolidated faster than anyone expected. Two years ago a typical project touched pip, virtualenv, black, isort, flake8, pylint, and mypy. Today you can replace all of that with three tools — and your CI runs in half the time.
The new stack
# Install uv (replaces pip + virtualenv + pip-tools)
curl -LsSf https://astral.sh/uv/install.sh | sh
# Create and activate environment
uv venv && source .venv/bin/activate
# Install and lock deps
uv add fastapi uvicorn
uv syncuv handles package resolution, virtual environments, and lockfiles faster than pip-compile ever did. ruff handles linting and formatting in a single pass. ty handles type checking with substantially better inference than mypy on complex generics.
Note
Migration path: swap pip to uv first (zero code changes), then ruff replaces black + isort + flake8 (add a ruff.toml). ty can run alongside mypy during transition.