skillby harperreed
uv
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.
Installs: 0
Used in: 1 repos
Updated: 3w ago
$
npx ai-builder add skill harperreed/uvInstalls to .claude/skills/uv/
# 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
```bash
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)
```bash
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)
```bash
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
```bash
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
```bash
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` |
```bash
uv cache dir && uv cache size # show path + size
uv cache clean # wipe wheels & sources
```
## CI: GitHub Actions
```yaml
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)
```dockerfile
# 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 ...` |Quick Install
$
npx ai-builder add skill harperreed/uvDetails
- Type
- skill
- Author
- harperreed
- Slug
- harperreed/uv
- Created
- 3w ago