https://github.com/a5chin/python-uv
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.
https://github.com/a5chin/python-uv
codecov codespaces devcontainer devcontainers docker nox pre-commit precommit pydantic pydantic-v2 pytest python python314 ruff template test ty uv zed
Last synced: 1 day ago
JSON representation
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.
- Host: GitHub
- URL: https://github.com/a5chin/python-uv
- Owner: a5chin
- License: mit
- Created: 2024-04-05T13:04:20.000Z (almost 2 years ago)
- Default Branch: develop
- Last Pushed: 2026-03-06T05:47:27.000Z (8 days ago)
- Last Synced: 2026-03-06T09:58:21.451Z (8 days ago)
- Topics: codecov, codespaces, devcontainer, devcontainers, docker, nox, pre-commit, precommit, pydantic, pydantic-v2, pytest, python, python314, ruff, template, test, ty, uv, zed
- Language: Python
- Homepage: https://a5chin.github.io/python-uv/
- Size: 7.11 MB
- Stars: 354
- Watchers: 4
- Forks: 69
- Open Issues: 6
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
- Code of conduct: CODE_OF_CONDUCT.md
- Codeowners: .github/CODEOWNERS
Awesome Lists containing this project
README
# Python Development with uv and Ruff
[](https://github.com/astral-sh/uv)
[](https://github.com/astral-sh/ruff)
[](https://github.com/astral-sh/ty)
[](https://github.com/a5chin/python-uv)
[](https://codecov.io/github/a5chin/python-uv)
[](https://github.com/a5chin/python-uv/actions/workflows/docker.yml)
[](https://github.com/a5chin/python-uv/actions/workflows/format.yml)
[](https://github.com/a5chin/python-uv/actions/workflows/lint.yml)
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](#python-development-with-uv-and-ruff)
- [๐ Table of Contents](#-table-of-contents)
- [โจ Features](#-features)
- [๐ Quick Start](#-quick-start)
- [Using Dev Container (Recommended)](#using-dev-container-recommended)
- [Using Docker Only](#using-docker-only)
- [Local Setup (Without Docker)](#local-setup-without-docker)
- [๐ Development Workflow](#-development-workflow)
- [Installing Dependencies](#installing-dependencies)
- [Running Tasks](#running-tasks)
- [Pre-commit Hooks](#pre-commit-hooks)
- [Documentation](#documentation)
- [๐๏ธ Project Structure](#๏ธ-project-structure)
- [Built-in Utility Modules](#built-in-utility-modules)
- [**Logger** - Dual-mode logging system](#logger---dual-mode-logging-system)
- [**Configuration** - Environment-based settings](#configuration---environment-based-settings)
- [**Timer** - Performance monitoring](#timer---performance-monitoring)
- [โ๏ธ Configuration](#๏ธ-configuration)
- [Ruff Configuration](#ruff-configuration)
- [ty Configuration](#ty-configuration)
- [Pytest Configuration](#pytest-configuration)
- [๐ CI/CD](#-cicd)
- [๐จ VSCode Configuration](#-vscode-configuration)
- [๐ช Cookiecutter Templates](#-cookiecutter-templates)
- [๐ Documentation](#-documentation)
- [๐ฟ Branches](#-branches)
- [๐ License](#-license)
- [๐ Acknowledgments](#-acknowledgments)
---
## โจ Features
- ๐ **Ultra-fast package management** with [uv](https://github.com/astral-sh/uv) (10-100x faster than pip)
- โก **Lightning-fast linting & formatting** with [Ruff](https://github.com/astral-sh/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)
1. **Prerequisites**: Install [Docker](https://www.docker.com/) and [VSCode](https://code.visualstudio.com/) with the [Dev Containers extension](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers)
2. **Open in container**:
```bash
git clone https://github.com/a5chin/python-uv.git
cd python-uv
code .
```
When prompted, click "Reopen in Container"
3. **Start developing**:
```bash
# 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
```bash
# 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](https://github.com/astral-sh/uv)
```bash
# 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
```bash
# 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:
```bash
# 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:
```bash
# 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:
```bash
# 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:
```bash
# 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:
```python
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:
```python
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:
```python
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) and `S101` (assert usage)
> See [Ruff documentation](https://docs.astral.sh/ruff/) for customization options.
### ty Configuration
Static type checking for Python code.
**Key settings in `ty.toml`:**
- **Include**: `tools/` and `tests/` packages
- **Exclude**: Cache directories (`__pycache__`, `.pytest_cache`, `.ruff_cache`, `.venv`)
> See [ty documentation](https://github.com/astral-sh/ty) 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](https://docs.pytest.org/) 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:
```bash
# Install cookiecutter
uv add --dev cookiecutter
# Use a template
uv run cookiecutter
```
**Recommended templates:**
- **Data Science**: [cookiecutter-data-science](https://github.com/drivendataorg/cookiecutter-data-science) - Standardized data science project structure
- **FastAPI**: [full-stack-fastapi-template](https://github.com/fastapi/full-stack-fastapi-template) - Full-stack web applications
- **Django**: [cookiecutter-django](https://github.com/cookiecutter/cookiecutter-django) - Production-ready Django projects
- **Flask**: [cookiecutter-flask](https://github.com/cookiecutter-flask/cookiecutter-flask) - Flask web applications
## ๐ Documentation
Comprehensive documentation is available at **[https://a5chin.github.io/python-uv](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](https://github.com/a5chin/python-uv/tree/main)** - Current production-ready template (recommended)
- **[jupyter](https://github.com/a5chin/python-uv/tree/jupyter)** - Archived: Jupyter-specific configuration
- **[rye](https://github.com/a5chin/python-uv/tree/rye)** - Archived: Rye package manager version (replaced by uv)
## ๐ License
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
## ๐ Acknowledgments
This template is built on top of excellent open-source tools:
- **[uv](https://github.com/astral-sh/uv)** by Astral - Ultra-fast Python package manager
- **[Ruff](https://github.com/astral-sh/ruff)** by Astral - Lightning-fast linter and formatter
- **[ty](https://github.com/astral-sh/ty)** by Astral - Static type checker for Python
- **[nox](https://nox.thea.codes/)** - Flexible task automation for Python
- **[pytest](https://pytest.org/)** - Testing framework for Python
- **[MkDocs](https://www.mkdocs.org/)** - Documentation site generator
Special thanks to the open-source community for making these tools available!