uv workflows for Python

VerifiedSafe

Master uv for Python dependency management, virtual environments, PEP 723 scripts, Python version management, CI with GitHub Actions, and Docker builds.

Sby Skills Guide Bot
DevelopmentIntermediate
15307/22/2026
Claude CodeCursorWindsurfCopilotCodex
#python#package-management#uv#ci-cd#docker

Recommended for

Automated summary

A reference manual for using uv in Python projects: dependency and virtualenv management, PEP 723 scripts, Python versions, GitHub Actions workflows, and multistage Docker images.

Strengths

  • Concrete, copy-pasteable commands for daily flows (project, script, CLI tools, Python versions, legacy pip interface)
  • A clear migration matrix from venv, pip, pip-tools, pipx, poetry and pyenv to their uv equivalents
  • Complete CI and multistage Docker recipes with layer-caching tips and --frozen/--no-dev flags
  • Documented performance environment variables and cache management commands

Limitations

  • Assumes uv is already installed and on PATH; installation itself is not covered
  • Version pins are dated 2026-07-05 and may have drifted since
  • The Docker recipe pulls ghcr.io/astral-sh/uv:latest in the runtime stage, which contradicts its own pinning advice; uv workspaces are not discussed
When to use it

Reach for it when bootstrapping or maintaining a Python project with uv, writing a CI workflow, or authoring a Python Dockerfile.

When not to use it

Skip it if the project is locked into Poetry or pip-tools with no migration planned, or if uv is not installed in the environment.

Security analysis

Safe
Quality score92/100

The skill is a reference manual for the uv Python tooling. It includes standard commands such as uv init, uv add, uv sync, and one scoped rm -rf .venv in a troubleshooting step. There are no exfiltration, obfuscation, or destructive system-wide instructions, and no network commands beyond standard package management.

No concerns found

How this analysis is made

Examples

New project with uv
Initialize a new Python project with uv, add pytest, ruff and httpx as dependencies, and run the test suite.
GitHub Actions with uv
Write a GitHub Actions workflow that installs uv with astral-sh/setup-uv, installs Python from .python-version, runs uv sync --locked, then runs pytest.
Multistage uv Dockerfile
Rewrite this Dockerfile as a multistage build using the uv image for dependencies and a slim Debian runtime, copying pyproject.toml and uv.lock first for layer caching.

name: uv description: uv workflows for Python — dependencies, virtualenvs, PEP 723 scripts, Python version management, CI, and Docker. Use when working on Python packaging/deps/tooling, writing GitHub Actions for Python projects, or building Docker images for Python apps.

uv Field Manual

Assumption: uv is installed and on PATH (uv --version to confirm; if missing, halt and report). Version pins below were current 2026-07-05 — verify before relying on them.

Daily workflows

Project ("cargo-style") flow

uv init myproj                     # create pyproject.toml + .venv
cd myproj
uv add ruff pytest httpx           # fast resolver + lock update
uv run pytest -q                   # run tests in project venv
uv lock                            # refresh uv.lock (if needed)
uv sync --locked                   # reproducible install (CI-safe)

Script flow (PEP 723)

uv run hello.py                    # zero-dep script, auto-env
uv add --script hello.py rich      # embeds dep metadata in the script
uv run --with rich hello.py        # transient deps, no state

CLI tools (pipx replacement)

uvx ruff check .                   # ephemeral run
uv tool install ruff               # user-wide persistent install
uv tool list                       # audit installed CLIs
uv tool update --all               # keep them fresh

Python version management

uv python install 3.12 3.13
uv python pin 3.13                 # writes .python-version
uv run --python 3.12 script.py

Legacy pip interface

uv venv .venv
source .venv/bin/activate
uv pip install -r requirements.txt
uv pip sync   -r requirements.txt   # deterministic install

Performance knobs

| Env Var | Purpose | Typical value | | ------------------------- | ----------------------- | ------------- | | UV_CONCURRENT_DOWNLOADS | saturate fat pipes | 16 or 32 | | UV_CONCURRENT_INSTALLS | parallel wheel installs | CPU cores | | UV_OFFLINE | cache-only mode | 1 | | UV_INDEX_URL | internal mirror | https://… | | UV_PYTHON | pin interpreter in CI | 3.13 |

uv cache dir && uv cache size      # show path + size
uv cache clean                     # wipe wheels & sources

CI: GitHub Actions

name: tests
on: [push]
jobs:
  pytest:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: astral-sh/setup-uv@v8.2.0   # immutable releases since v8.0.0 — moving tags like @v8 do NOT exist; pin the full version
      - run: uv python install            # obeys .python-version
      - run: uv sync --locked
      - run: uv run pytest -q

Docker (multistage — the one true recipe)

# Build stage
FROM ghcr.io/astral-sh/uv:python3.13-bookworm-slim AS builder
WORKDIR /app
# Deps first for layer caching; code after
COPY pyproject.toml uv.lock ./
RUN uv sync --frozen --no-cache --no-dev

# Runtime stage
FROM debian:bookworm-slim
COPY --from=ghcr.io/astral-sh/uv:latest /uv /bin/uv
RUN useradd --create-home --shell /bin/bash app
WORKDIR /app
COPY --from=builder /app/.venv /app/.venv
COPY --chown=app:app . .
USER app
ENV PATH="/app/.venv/bin:$PATH"
CMD ["uv", "run", "python", "-m", "myapp"]

Tips: copy pyproject.toml + uv.lock before app code (layer caching); --frozen honors the lockfile exactly; --no-cache keeps the image lean; --no-dev skips dev deps; set PATH so the venv is active.

Migration matrix

| Legacy | Replacement | | -------------------- | ---------------------- | | python -m venv | uv venv | | pip install | uv pip install | | pip-tools compile | uv lock | | pipx run | uvx | | poetry add | uv add | | pyenv install | uv python install |

Troubleshooting

| Symptom | Resolution | | ------------------------ | ------------------------------------------------------ | | Python X.Y not found | uv python install X.Y or set UV_PYTHON | | C-extension build errors | unset UV_NO_BUILD_ISOLATION | | Need a fresh env | uv cache clean && rm -rf .venv && uv sync | | Still stuck | RUST_LOG=debug uv ... |

Related skills