$npx -y skills add Aedelon/claude-code-blueprint --skill uv-workflowMaster uv package manager for Python: project setup, dependency management, virtual environments, lockfiles, CI/CD integration, Docker builds, and migration from pip/poetry. MUST BE USED when user mentions: "uv", "uv add", "uv run", "uv sync", "uv init", "uv lock", "uv venv", "uv
| 1 | # UV Package Manager |
| 2 | |
| 3 | Ultra-fast Python package installer and resolver written in Rust. 10-100x faster than pip. |
| 4 | |
| 5 | ## Quick Reference |
| 6 | |
| 7 | ```bash |
| 8 | # Project lifecycle |
| 9 | uv init my-project # Create project |
| 10 | uv add requests pandas # Add deps |
| 11 | uv add --dev pytest ruff # Add dev deps |
| 12 | uv remove package # Remove |
| 13 | uv sync # Install all from pyproject.toml |
| 14 | uv lock # Generate/update lockfile |
| 15 | uv run pytest # Run in venv (no activation needed) |
| 16 | |
| 17 | # Virtual environments |
| 18 | uv venv # Create .venv |
| 19 | uv venv --python 3.12 # With specific Python |
| 20 | uv python install 3.12 # Install Python version |
| 21 | uv python pin 3.12 # Pin for project |
| 22 | |
| 23 | # pip-compatible |
| 24 | uv pip install -r requirements.txt |
| 25 | uv pip freeze > requirements.txt |
| 26 | ``` |
| 27 | |
| 28 | ## Project Setup Pattern |
| 29 | |
| 30 | ```bash |
| 31 | uv init my-project && cd my-project |
| 32 | uv python pin 3.12 |
| 33 | uv add fastapi uvicorn pydantic |
| 34 | uv add --dev pytest ruff mypy black |
| 35 | mkdir -p src/my_project tests |
| 36 | uv run pytest |
| 37 | ``` |
| 38 | |
| 39 | Creates: `pyproject.toml`, `.python-version`, `uv.lock`, `.venv/` |
| 40 | |
| 41 | ## pyproject.toml Standard |
| 42 | |
| 43 | ```toml |
| 44 | [project] |
| 45 | name = "my-project" |
| 46 | version = "0.1.0" |
| 47 | requires-python = ">=3.10" |
| 48 | dependencies = [ |
| 49 | "requests>=2.31.0", |
| 50 | "pydantic>=2.0.0", |
| 51 | ] |
| 52 | |
| 53 | [project.optional-dependencies] |
| 54 | dev = [ |
| 55 | "pytest>=7.4.0", |
| 56 | "ruff>=0.1.0", |
| 57 | "mypy>=1.5.0", |
| 58 | ] |
| 59 | |
| 60 | [build-system] |
| 61 | requires = ["hatchling"] |
| 62 | build-backend = "hatchling.build" |
| 63 | |
| 64 | [tool.uv] |
| 65 | dev-dependencies = [] |
| 66 | |
| 67 | [tool.uv.workspace] |
| 68 | members = ["packages/*"] # For monorepos |
| 69 | ``` |
| 70 | |
| 71 | ## Lockfile Workflow |
| 72 | |
| 73 | ```bash |
| 74 | uv lock # Create/update uv.lock |
| 75 | uv sync --frozen # Install exact versions (CI) |
| 76 | uv lock --upgrade # Upgrade all |
| 77 | uv lock --upgrade-package requests # Upgrade one |
| 78 | uv lock --check # Verify lockfile is current |
| 79 | uv export --format requirements-txt > requirements.txt # Export |
| 80 | ``` |
| 81 | |
| 82 | **Rule**: Always commit `uv.lock` to version control. |
| 83 | |
| 84 | ## Docker Integration |
| 85 | |
| 86 | ```dockerfile |
| 87 | FROM python:3.12-slim AS builder |
| 88 | COPY --from=ghcr.io/astral-sh/uv:latest /uv /usr/local/bin/uv |
| 89 | WORKDIR /app |
| 90 | COPY pyproject.toml uv.lock ./ |
| 91 | RUN uv sync --frozen --no-dev --no-editable |
| 92 | |
| 93 | FROM python:3.12-slim |
| 94 | WORKDIR /app |
| 95 | COPY --from=builder /app/.venv .venv |
| 96 | COPY . . |
| 97 | ENV PATH="/app/.venv/bin:$PATH" |
| 98 | CMD ["python", "app.py"] |
| 99 | ``` |
| 100 | |
| 101 | ## CI/CD (GitHub Actions) |
| 102 | |
| 103 | ```yaml |
| 104 | name: Tests |
| 105 | on: [push, pull_request] |
| 106 | jobs: |
| 107 | test: |
| 108 | runs-on: ubuntu-latest |
| 109 | steps: |
| 110 | - uses: actions/checkout@v4 |
| 111 | - uses: astral-sh/setup-uv@v2 |
| 112 | with: |
| 113 | enable-cache: true |
| 114 | - run: uv python install 3.12 |
| 115 | - run: uv sync --all-extras --dev |
| 116 | - run: uv run pytest |
| 117 | - run: uv run ruff check . |
| 118 | ``` |
| 119 | |
| 120 | ## Migration Guides |
| 121 | |
| 122 | ### From pip |
| 123 | ```bash |
| 124 | # Before: pip install -r requirements.txt |
| 125 | # After: |
| 126 | uv init |
| 127 | uv add -r requirements.txt |
| 128 | ``` |
| 129 | |
| 130 | ### From poetry |
| 131 | ```bash |
| 132 | # Before: poetry install |
| 133 | # After: uv already reads pyproject.toml |
| 134 | uv sync |
| 135 | ``` |
| 136 | |
| 137 | ### From pip-tools |
| 138 | ```bash |
| 139 | # Before: pip-compile && pip-sync |
| 140 | # After: |
| 141 | uv lock && uv sync --frozen |
| 142 | ``` |
| 143 | |
| 144 | ## Key Commands |
| 145 | |
| 146 | | Command | Purpose | |
| 147 | |---------|---------| |
| 148 | | `uv init` | Initialize project | |
| 149 | | `uv add PKG` | Add dependency | |
| 150 | | `uv add --dev PKG` | Add dev dependency | |
| 151 | | `uv remove PKG` | Remove dependency | |
| 152 | | `uv sync` | Install all deps | |
| 153 | | `uv sync --frozen` | Install exact (CI) | |
| 154 | | `uv lock` | Create/update lockfile | |
| 155 | | `uv run CMD` | Run in venv | |
| 156 | | `uv venv` | Create venv | |
| 157 | | `uv python install` | Install Python | |
| 158 | | `uv python pin` | Pin Python version | |
| 159 | | `uv cache clean` | Clear cache | |
| 160 | |
| 161 | ## Best Practices |
| 162 | |
| 163 | 1. Always use `uv run` instead of activating venv |
| 164 | 2. Commit `uv.lock` to git |
| 165 | 3. Use `--frozen` in CI for reproducible builds |
| 166 | 4. Pin Python version with `.python-version` |
| 167 | 5. Separate dev deps from production deps |
| 168 | 6. Use workspaces for monorepos |
| 169 | 7. Export `requirements.txt` for compatibility when needed |