python-uv
Python uv
Overview
uv is an extremely fast Python package and project manager written in Rust, designed to replace pip, pip-tools, pipx, poetry, pyenv, and virtualenv. It provides unified project management, dependency resolution, Python version management, and tool execution with 10-100x speed improvements over traditional tools.
Key capabilities: Project initialization, dependency locking and syncing, Python version management, PEP 723 inline script dependencies, ephemeral tool execution via uvx, monorepo workspaces with shared lockfiles, and package building/publishing.
When to use: Python project initialization, dependency management, virtual environments, Python version pinning, running scripts with inline dependencies, monorepo workspaces, tool execution, publishing packages.
When NOT to use: Non-Python projects, conda-managed scientific computing environments with system-level binary dependencies, projects locked to legacy setup.py-only workflows.
Quick Reference
| Pattern | Command / API | Key Points |
|---|---|---|
| Init project | uv init |
Creates pyproject.toml and .python-version |
| Init library | uv init --lib |
Creates src/ layout with py.typed |
| Init script | uv init --script example.py |
PEP 723 inline metadata script |
| Add dependency | uv add requests |
Adds to pyproject.toml, updates lockfile |
| Add dev dependency | uv add --dev pytest |
Adds to [dependency-groups] dev group |
| Add group dependency | uv add --group docs mkdocs |
Custom dependency groups |
| Add optional | uv add --optional postgres psycopg |
Optional extras for libraries |
| Remove dependency | uv remove requests |
Removes from pyproject.toml and lockfile |
| Lock dependencies | uv lock |
Creates/updates uv.lock |
| Upgrade in lockfile | uv lock --upgrade-package requests |
Targeted dependency upgrade |
| Sync environment | uv sync |
Installs locked dependencies into .venv |
| Sync for CI | uv sync --locked |
Fails if lockfile is stale |
| Sync frozen | uv sync --frozen |
Skips lockfile verification |
| Run command | uv run python app.py |
Runs in project virtual environment |
| Run script | uv run script.py |
Supports PEP 723 inline dependencies |
| Run in package | uv run --package api pytest |
Workspace-specific execution |
| Install Python | uv python install 3.13 |
Downloads and manages Python versions |
| Pin Python | uv python pin 3.12 |
Writes .python-version file |
| List Pythons | uv python list |
Shows available and installed versions |
| Run tool | uvx ruff check . |
Ephemeral tool execution |
| Tool with plugins | uvx --with mkdocs-material mkdocs |
Ephemeral tool with extra packages |
| Install tool | uv tool install ruff |
Persistent global tool install |
| Workspace | [tool.uv.workspace] |
Monorepo multi-package support |
| Build package | uv build |
Creates sdist and wheel in dist/ |
| Publish | uv publish |
Uploads to PyPI with trusted publishing |
| Export deps | uv export --format requirements-txt |
Generate requirements.txt from lockfile |
Common Mistakes
| Mistake | Correct Pattern |
|---|---|
Using pip install inside uv project |
uv add to manage via pyproject.toml |
Activating venv manually before uv run |
uv run handles venv activation automatically |
Committing .venv/ to version control |
Add .venv/ to .gitignore, commit uv.lock |
Not committing uv.lock |
Always commit uv.lock for reproducible builds |
Using uv sync without --locked in CI |
uv sync --locked ensures lockfile matches pyproject.toml |
Running uv lock --upgrade routinely |
Only upgrade intentionally, use --upgrade-package for targeted updates |
Mixing pip and uv dependency management |
Choose one tool for the project consistently |
Using uv pip install for project deps |
Use uv add/uv sync for managed projects |
Forgetting --frozen for Docker builds |
uv sync --frozen skips lockfile verification for faster builds |
| Creating venv manually in uv project | uv sync creates and manages .venv automatically |
Using setup.py for new projects |
Use pyproject.toml with a modern build backend |
Not using py.typed in libraries |
uv init --lib includes it, required for typed packages |
Delegation
- Project scaffolding: Use
Exploreagent - Dependency audit: Use
Taskagent - Code review: Delegate to
code-revieweragent
If the
dockerskill is available, delegate containerization patterns to it. If thegithub-actionsskill is available, delegate CI/CD pipeline configuration to it. If theapi-testingskill is available, delegate API testing patterns to it. If thesentry-setup-loggingskill is available, delegate error monitoring setup to it. If thepino-loggingskill is available, delegate Node.js logging patterns to it (Python equivalent covered here with structlog).
References
- Project management and pyproject.toml configuration
- Dependency management, lockfiles, and groups
- Python version management and virtual environments
- Scripts, inline dependencies, and tool management
- Workspace support for monorepos
- FastAPI web framework patterns
- Pydantic validation and data modeling
- Async patterns with asyncio
- Type checking with mypy and pyright
- Testing with pytest
- Logging with structlog
- CLI applications with typer
- Docker integration and publishing