A production-ready Python development environment template using modern tools: uv for blazing-fast package management, Ruff for lightning-fast linting and formatting, ty for fast and reliable type checking, and VSCode Dev Containers for reproducible development environments.
๐ Table of Contents
- Python Development with uv and Ruff
โจ Features
- ๐ Ultra-fast package management with uv (10-100x faster than pip)
- โก Lightning-fast linting & formatting with Ruff (replacing Black, isort, Flake8, and more)
- ๐ณ Dev Container ready - Consistent development environment across all machines
- ๐ Type checking with ty
- โ Pre-configured testing with pytest (75% coverage requirement)
- ๐ Automated CI/CD with GitHub Actions
- ๐ฆ Reusable utilities - Logger, configuration management, and performance tracing tools
- ๐ฏ Task automation with nox
- ๐ช Pre-commit hooks for automatic code quality checks
๐ Quick Start
Using Dev Container (Recommended)
-
Prerequisites: Install Docker and VSCode with the Dev Containers extension
-
Open in container:
git clone https://github.com/a5chin/python-uv.git cd python-uv code .
When prompted, click "Reopen in Container"
-
Start developing:
# Install dependencies uv sync # Run tests uv run nox -s test # Format and lint uv run nox -s fmt uv run nox -s lint -- --ruff --ty
Using Docker Only
# Build the image docker build -t python-uv . # Run container docker run -it --rm -v $(pwd):/workspace python-uv
Local Setup (Without Docker)
Prerequisites: Python 3.11+ and uv
# Install uv (if not already installed) curl -LsSf https://astral.sh/uv/install.sh | sh # Clone and setup git clone https://github.com/a5chin/python-uv.git cd python-uv # Install dependencies uv sync # Install pre-commit hooks (optional) uv run pre-commit install
๐ Development Workflow
Installing Dependencies
# Install all dependencies (including dev dependencies) uv sync # Install without dev dependencies uv sync --no-dev # Add new dependencies uv add requests pandas # Add dev dependencies uv add --dev pytest-mock
Running Tasks
This project uses nox for task automation. All common development tasks are available as nox sessions:
# Format code with Ruff uv run nox -s fmt # Run linters (Ruff + ty) uv run nox -s lint -- --ruff --ty # Run only ty uv run nox -s lint -- --ty # Run only Ruff linter uv run nox -s lint -- --ruff # Run tests with coverage (75% minimum required) uv run nox -s test # Run tests with JUnit XML output (for CI) uv run nox -s test -- --cov_report xml --junitxml junit.xml
You can also run tools directly:
# Run pytest directly uv run pytest # Run specific test file uv run pytest tests/tools/test__logger.py # Format with Ruff uv run ruff format . # Lint with Ruff uv run ruff check . --fix # Type check with ty uv run ty check
Pre-commit Hooks
Pre-commit hooks automatically run code quality checks before each commit:
# Install hooks uv run pre-commit install # Run manually on all files uv run pre-commit run --all-files
Configured hooks:
- Ruff formatting and linting
- JSON, YAML, TOML validation
- Trailing whitespace removal
- End-of-file fixer
- Private key detection
- Dockerfile linting with hadolint
Documentation
Generate and serve documentation with MkDocs:
# Serve locally at http://127.0.0.1:8000 uv run mkdocs serve # Build static site uv run mkdocs build # Deploy to GitHub Pages uv run mkdocs gh-deploy
๐๏ธ Project Structure
.
โโโ tools/ # Reusable utility modules
โ โโโ config/ # Configuration management (Settings, FastAPI config)
โ โโโ logger/ # Logging utilities (Local & Google Cloud formatters)
โ โโโ tracer/ # Performance tracing (Timer decorator/context manager)
โโโ tests/ # Test suite (mirrors tools/ structure)
โ โโโ tools/ # Unit tests for utility modules
โโโ docs/ # MkDocs documentation
โ โโโ getting-started/ # Setup guides
โ โโโ guides/ # Tool usage guides
โ โโโ configurations/ # Configuration references
โ โโโ usecases/ # Real-world examples
โโโ .devcontainer/ # Dev Container configuration
โโโ .github/ # GitHub Actions workflows, PR templates, and review checklists
โโโ CODE_OF_CONDUCT.md # Community Code of Conduct
โโโ CONTRIBUTING.md # Contribution guidelines
โโโ CLAUDE.md # Claude Code development guidance
โโโ noxfile.py # Task automation configuration (test, lint, fmt)
โโโ pyproject.toml # Project metadata and dependencies (uv)
โโโ ruff.toml # Ruff linter/formatter configuration
โโโ pytest.ini # Pytest configuration (75% coverage requirement)
Built-in Utility Modules
The tools/ package provides production-ready utilities that can be used in your projects:
Logger - Dual-mode logging system
Environment-aware logging with support for local development and cloud environments:
from tools.logger import Logger, LogType # Local development (colored console output) logger = Logger(__name__, log_type=LogType.LOCAL) # Google Cloud (structured JSON logging) logger = Logger(__name__, log_type=LogType.GOOGLE_CLOUD, project="my-project") logger.info("Application started")
Configuration - Environment-based settings
Type-safe configuration management using Pydantic:
from tools.config import Settings settings = Settings() # Loads from .env and .env.local api_url = settings.api_prefix_v1 is_debug = settings.DEBUG
Timer - Performance monitoring
Automatic execution time logging for functions and code blocks:
from tools.tracer import Timer # As context manager with Timer("database_query"): result = db.query() # Logs execution time automatically # As decorator @Timer("process_data") def process_data(data): return transform(data) # Logs execution time when function completes
โ๏ธ Configuration
Ruff Configuration
Ruff replaces multiple tools (Black, isort, Flake8, pydocstyle, pyupgrade, autoflake) with a single, fast tool.
Key settings in ruff.toml:
- Line length: 88 (Black-compatible)
- Target Python: 3.14
- Rules: ALL enabled by default with specific exclusions
- Test files: Exempt from
INP001(namespace packages) andS101(assert usage)
See Ruff documentation for customization options.
ty Configuration
Static type checking for Python code.
Key settings in ty.toml:
- Include:
tools/andtests/packages - Exclude: Cache directories (
__pycache__,.pytest_cache,.ruff_cache,.venv)
See ty documentation for advanced configuration.
Pytest Configuration
Testing framework with coverage enforcement.
Key settings in pytest.ini:
- Coverage requirement: 75% minimum (including branch coverage)
- Test file pattern:
test__*.py(double underscore) - Coverage reports: HTML and terminal
- Import mode: importlib
See pytest documentation for additional options.
๐ CI/CD
Automated workflows ensure code quality and consistency. All workflows run on push and pull requests.
Available workflows in .github/workflows/:
| Workflow | Purpose | Tools Used |
|---|---|---|
docker.yml |
Validate Docker build | Docker |
devcontainer.yml |
Validate Dev Container configuration | devcontainer CLI |
format.yml |
Check code formatting | Ruff |
labeler.yml |
Add label in GitHub | GitHub |
lint.yml |
Run static analysis | Ruff, ty |
test.yml |
Run test suite with coverage | pytest, coverage |
gh-deploy.yml |
Deploy documentation to GitHub Pages | MkDocs |
pr-agent.yml |
Automated PR reviews | Qodo AI PR Agent |
publish-devcontainer.yml |
Publish Dev Container image | Docker, GHCR |
๐จ VSCode Configuration
The Dev Container includes pre-configured extensions and settings for optimal Python development.
Python Development:
- Ruff - Fast linting and formatting
- ty - Static type checking
- Python - Core Python support
- autodocstring - Automatic docstring generation
- python-indent - Correct Python indentation
Code Quality:
- GitLens - Enhanced Git integration
- Error Lens - Inline error highlighting
- indent-rainbow - Visual indentation guide
- trailing-spaces - Highlight trailing whitespace
File Support:
- YAML, TOML, Markdown - Configuration file support
- Docker - Dockerfile and docker-compose support
- Material Icon Theme - File icons
Editor Settings:
- โ Format on save (Python, JSON, YAML, TOML, Dockerfile)
- โ Auto-trim trailing whitespace
- โ Auto-insert final newline
- โ Organize imports on save
Troubleshooting: If Ruff formatting doesn't work, reload the window:
Cmd+Shift+Pโ "Developer: Reload Window"
๐ช Cookiecutter Templates
This repository can be used as a base template for various Python projects. Combine it with Cookiecutter to bootstrap project-specific setups:
# Install cookiecutter uv add --dev cookiecutter # Use a template uv run cookiecutter <template-url>
Recommended templates:
- Data Science: cookiecutter-data-science - Standardized data science project structure
- FastAPI: full-stack-fastapi-template - Full-stack web applications
- Django: cookiecutter-django - Production-ready Django projects
- Flask: cookiecutter-flask - Flask web applications
๐ Documentation
Comprehensive documentation is available at https://a5chin.github.io/python-uv
Topics covered:
- ๐ Getting Started - Docker, VSCode, Dev Containers setup
- โ๏ธ Tool Configurations - uv, Ruff, ty, pre-commit
- ๐งช Testing Strategies - pytest, coverage, and best practices
- ๐ ๏ธ Utility Modules - Config, logger, and tracer guides
- ๐ก Use Cases - Jupyter, FastAPI, OpenCV examples
๐ฟ Branches
This repository maintains multiple branches for different use cases:
- main - Current production-ready template (recommended)
- jupyter - Archived: Jupyter-specific configuration
- rye - Archived: Rye package manager version (replaced by uv)
๐ License
This project is licensed under the MIT License - see the LICENSE file for details.
๐ Acknowledgments
This template is built on top of excellent open-source tools:
- uv by Astral - Ultra-fast Python package manager
- Ruff by Astral - Lightning-fast linter and formatter
- ty by Astral - Static type checker for Python
- nox - Flexible task automation for Python
- pytest - Testing framework for Python
- MkDocs - Documentation site generator
Special thanks to the open-source community for making these tools available!

