uv-package-manager
upstream

Master the uv package manager for fast Python dependency management, virtual environments, and modern Python project workflows. Use when setting up Python projects, managing dependencies, or optimizing Python development workflows with uv.

ID: uv-package-manager
Preview
Codigo

UV Package Manager


Comprehensive guide to using uv, an extremely fast Python package installer and resolver written in Rust, for modern Python project management and dependency workflows.


When to Use This Skill


  • Setting up new Python projects quickly
  • Managing Python dependencies faster than pip
  • Creating and managing virtual environments
  • Installing Python interpreters
  • Resolving dependency conflicts efficiently
  • Migrating from pip/pip-tools/poetry
  • Speeding up CI/CD pipelines
  • Managing monorepo Python projects
  • Working with lockfiles for reproducible builds
  • Optimizing Docker builds with Python dependencies

Core Concepts


1. What is uv?

  • Ultra-fast package installer: 10-100x faster than pip
  • Written in Rust: Leverages Rust's performance
  • Drop-in pip replacement: Compatible with pip workflows
  • Virtual environment manager: Create and manage venvs
  • Python installer: Download and manage Python versions
  • Resolver: Advanced dependency resolution
  • Lockfile support: Reproducible installations

2. Key Features

  • Blazing fast installation speeds
  • Disk space efficient with global cache
  • Compatible with pip, pip-tools, poetry
  • Comprehensive dependency resolution
  • Cross-platform support (Linux, macOS, Windows)
  • No Python required for installation
  • Built-in virtual environment support

3. UV vs Traditional Tools

  • vs pip: 10-100x faster, better resolver
  • vs pip-tools: Faster, simpler, better UX
  • vs poetry: Faster, less opinionated, lighter
  • vs conda: Faster, Python-focused

Installation


Quick Install


``bash

macOS/Linux

curl -LsSf https://astral.sh/uv/install.sh | sh


Windows (PowerShell)

powershell -c "irm https://astral.sh/uv/install.ps1 | iex"


Using pip (if you already have Python)

pip install uv


Using Homebrew (macOS)

brew install uv


Using cargo (if you have Rust)

cargo install --git https://github.com/astral-sh/uv uv

`


Verify Installation


`bash

uv --version

uv 0.x.x

`


Quick Start


Create a New Project


`bash

Create new project with virtual environment

uv init my-project

cd my-project


Or create in current directory

uv init .


Initialize creates:

- .python-version (Python version)

- pyproject.toml (project config)

- README.md

- .gitignore

`


Install Dependencies


`bash

Install packages (creates venv if needed)

uv add requests pandas


Install dev dependencies

uv add --dev pytest black ruff


Install from requirements.txt

uv pip install -r requirements.txt


Install from pyproject.toml

uv sync

`


Virtual Environment Management


Pattern 1: Creating Virtual Environments


`bash

Create virtual environment with uv

uv venv


Create with specific Python version

uv venv --python 3.12


Create with custom name

uv venv my-env


Create with system site packages

uv venv --system-site-packages


Specify location

uv venv /path/to/venv

`


Pattern 2: Activating Virtual Environments


`bash

Linux/macOS

source .venv/bin/activate


Windows (Command Prompt)

.venv\Scripts\activate.bat


Windows (PowerShell)

.venv\Scripts\Activate.ps1


Or use uv run (no activation needed)

uv run python script.py

uv run pytest

`


Pattern 3: Using uv run


`bash

Run Python script (auto-activates venv)

uv run python app.py


Run installed CLI tool

uv run black .

uv run pytest


Run with specific Python version

uv run --python 3.11 python script.py


Pass arguments

uv run python script.py --arg value

`


Package Management


Pattern 4: Adding Dependencies


`bash

Add package (adds to pyproject.toml)

uv add requests


Add with version constraint

uv add "django>=4.0,<5.0"


Add multiple packages

uv add numpy pandas matplotlib


Add dev dependency

uv add --dev pytest pytest-cov


Add optional dependency group

uv add --optional docs sphinx


Add from git

uv add git+https://github.com/user/repo.git


Add from git with specific ref

uv add git+https://github.com/user/repo.git@v1.0.0


Add from local path

uv add ./local-package


Add editable local package

uv add -e ./local-package

`


Pattern 5: Removing Dependencies


`bash

Remove package

uv remove requests


Remove dev dependency

uv remove --dev pytest


Remove multiple packages

uv remove numpy pandas matplotlib

`


Pattern 6: Upgrading Dependencies


`bash

Upgrade specific package

uv add --upgrade requests


Upgrade all packages

uv sync --upgrade


Upgrade package to latest

uv add --upgrade requests


Show what would be upgraded

uv tree --outdated

`


Pattern 7: Locking Dependencies


`bash

Generate uv.lock file

uv lock


Update lock file

uv lock --upgrade


Lock without installing

uv lock --no-install


Lock specific package

uv lock --upgrade-package requests

`


Python Version Management


Pattern 8: Installing Python Versions


`bash

Install Python version

uv python install 3.12


Install multiple versions

uv python install 3.11 3.12 3.13


Install latest version

uv python install


List installed versions

uv python list


Find available versions

uv python list --all-versions

`


Pattern 9: Setting Python Version


`bash

Set Python version for project

uv python pin 3.12


This creates/updates .python-version file


Use specific Python version for command

uv --python 3.11 run python script.py


Create venv with specific version

uv venv --python 3.12

`


Project Configuration


Pattern 10: pyproject.toml with uv


`toml

[project]

name = "my-project"

version = "0.1.0"

description = "My awesome project"

readme = "README.md"

requires-python = ">=3.8"

dependencies = [

"requests>=2.31.0",

"pydantic>=2.0.0",

"click>=8.1.0",

]


[project.optional-dependencies]

dev = [

"pytest>=7.4.0",

"pytest-cov>=4.1.0",

"black>=23.0.0",

"ruff>=0.1.0",

"mypy>=1.5.0",

]

docs = [

"sphinx>=7.0.0",

"sphinx-rtd-theme>=1.3.0",

]


[build-system]

requires = ["hatchling"]

build-backend = "hatchling.build"


[tool.uv]

dev-dependencies = [

# Additional dev dependencies managed by uv

]


[tool.uv.sources]

Custom package sources

my-package = { git = "https://github.com/user/repo.git" }

`


Pattern 11: Using uv with Existing Projects


`bash

Migrate from requirements.txt

uv add -r requirements.txt


Migrate from poetry

Already have pyproject.toml, just use:

uv sync


Export to requirements.txt

uv pip freeze > requirements.txt


Export with hashes

uv pip freeze --require-hashes > requirements.txt

`


Advanced Workflows


Pattern 12: Monorepo Support


`bash

Project structure

monorepo/

packages/

package-a/

pyproject.toml

package-b/

pyproject.toml

pyproject.toml (root)


Root pyproject.toml

[tool.uv.workspace]

members = ["packages/*"]


Install all workspace packages

uv sync


Add workspace dependency

uv add --path ./packages/package-a

`


Pattern 13: CI/CD Integration


`yaml

.github/workflows/test.yml

name: Tests


on: [push, pull_request]


jobs:

test:

runs-on: ubuntu-latest


steps:

- uses: actions/checkout@v4


- name: Install uv

uses: astral-sh/setup-uv@v2

with:

enable-cache: true


- name: Set up Python

run: uv python install 3.12


- name: Install dependencies

run: uv sync --all-extras --dev


- name: Run tests

run: uv run pytest


- name: Run linting

run: |

uv run ruff check .

uv run black --check .

`


Pattern 14: Docker Integration


`dockerfile

Dockerfile

FROM python:3.12-slim


Install uv

COPY --from=ghcr.io/astral-sh/uv:latest /uv /usr/local/bin/uv


Set working directory

WORKDIR /app


Copy dependency files

COPY pyproject.toml uv.lock ./


Install dependencies

RUN uv sync --frozen --no-dev


Copy application code

COPY . .


Run application

CMD ["uv", "run", "python", "app.py"]

`


Optimized multi-stage build:


`dockerfile

Multi-stage Dockerfile

FROM python:3.12-slim AS builder


Install uv

COPY --from=ghcr.io/astral-sh/uv:latest /uv /usr/local/bin/uv


WORKDIR /app


Install dependencies to venv

COPY pyproject.toml uv.lock ./

RUN uv sync --frozen --no-dev --no-editable


Runtime stage

FROM python:3.12-slim


WORKDIR /app


Copy venv from builder

COPY --from=builder /app/.venv .venv

COPY . .


Use venv

ENV PATH="/app/.venv/bin:$PATH"


CMD ["python", "app.py"]

`


Pattern 15: Lockfile Workflows


`bash

Create lockfile (uv.lock)

uv lock


Install from lockfile (exact versions)

uv sync --frozen


Update lockfile without installing

uv lock --no-install


Upgrade specific package in lock

uv lock --upgrade-package requests


Check if lockfile is up to date

uv lock --check


Export lockfile to requirements.txt

uv export --format requirements-txt > requirements.txt


Export with hashes for security

uv export --format requirements-txt --hash > requirements.txt

`


Performance Optimization


Pattern 16: Using Global Cache


`bash

UV automatically uses global cache at:

Linux: ~/.cache/uv

macOS: ~/Library/Caches/uv

Windows: %LOCALAPPDATA%\uv\cache


Clear cache

uv cache clean


Check cache size

uv cache dir

`


Pattern 17: Parallel Installation


`bash

UV installs packages in parallel by default


Control parallelism

uv pip install --jobs 4 package1 package2


No parallel (sequential)

uv pip install --jobs 1 package

`


Pattern 18: Offline Mode


`bash

Install from cache only (no network)

uv pip install --offline package


Sync from lockfile offline

uv sync --frozen --offline

`


Comparison with Other Tools


uv vs pip


`bash

pip

python -m venv .venv

source .venv/bin/activate

pip install requests pandas numpy

~30 seconds


uv

uv venv

uv add requests pandas numpy

~2 seconds (10-15x faster)

`


uv vs poetry


`bash

poetry

poetry init

poetry add requests pandas

poetry install

~20 seconds


uv

uv init

uv add requests pandas

uv sync

~3 seconds (6-7x faster)

`


uv vs pip-tools


`bash

pip-tools

pip-compile requirements.in

pip-sync requirements.txt

~15 seconds


uv

uv lock

uv sync --frozen

~2 seconds (7-8x faster)

`


Common Workflows


Pattern 19: Starting a New Project


`bash

Complete workflow

uv init my-project

cd my-project


Set Python version

uv python pin 3.12


Add dependencies

uv add fastapi uvicorn pydantic


Add dev dependencies

uv add --dev pytest black ruff mypy


Create structure

mkdir -p src/my_project tests


Run tests

uv run pytest


Format code

uv run black .

uv run ruff check .

`


Pattern 20: Maintaining Existing Project


`bash

Clone repository

git clone https://github.com/user/project.git

cd project


Install dependencies (creates venv automatically)

uv sync


Install with dev dependencies

uv sync --all-extras


Update dependencies

uv lock --upgrade


Run application

uv run python app.py


Run tests

uv run pytest


Add new dependency

uv add new-package


Commit updated files

git add pyproject.toml uv.lock

git commit -m "Add new-package dependency"

`


Tool Integration


Pattern 21: Pre-commit Hooks


`yaml

.pre-commit-config.yaml

repos:

- repo: local

hooks:

- id: uv-lock

name: uv lock

entry: uv lock

language: system

pass_filenames: false


- id: ruff

name: ruff

entry: uv run ruff check --fix

language: system

types: [python]


- id: black

name: black

entry: uv run black

language: system

types: [python]

`


Pattern 22: VS Code Integration


`json

// .vscode/settings.json

{

"python.defaultInterpreterPath": "${workspaceFolder}/.venv/bin/python",

"python.terminal.activateEnvironment": true,

"python.testing.pytestEnabled": true,

"python.testing.pytestArgs": ["-v"],

"python.linting.enabled": true,

"python.formatting.provider": "black",

"[python]": {

"editor.defaultFormatter": "ms-python.black-formatter",

"editor.formatOnSave": true

}

}

`


Troubleshooting


Common Issues


`bash

Issue: uv not found

Solution: Add to PATH or reinstall

echo 'export PATH="$HOME/.cargo/bin:$PATH"' >> ~/.bashrc


Issue: Wrong Python version

Solution: Pin version explicitly

uv python pin 3.12

uv venv --python 3.12


Issue: Dependency conflict

Solution: Check resolution

uv lock --verbose


Issue: Cache issues

Solution: Clear cache

uv cache clean


Issue: Lockfile out of sync

Solution: Regenerate

uv lock --upgrade

`


Best Practices


Project Setup


1. Always use lockfiles for reproducibility

2. Pin Python version with .python-version

3. Separate dev dependencies from production

4. Use uv run instead of activating venv

5. Commit uv.lock to version control

6. Use --frozen in CI for consistent builds

7. Leverage global cache for speed

8. Use workspace for monorepos

9. Export requirements.txt for compatibility

10. Keep uv updated for latest features


Performance Tips


`bash

Use frozen installs in CI

uv sync --frozen


Use offline mode when possible

uv sync --offline


Parallel operations (automatic)

uv does this by default


Reuse cache across environments

uv shares cache globally


Use lockfiles to skip resolution

uv sync --frozen # skips resolution

`


Migration Guide


From pip + requirements.txt


`bash

Before

python -m venv .venv

source .venv/bin/activate

pip install -r requirements.txt


After

uv venv

uv pip install -r requirements.txt

Or better:

uv init

uv add -r requirements.txt

`


From Poetry


`bash

Before

poetry install

poetry add requests


After

uv sync

uv add requests


Keep existing pyproject.toml

uv reads [project] and [tool.poetry] sections

`


From pip-tools


`bash

Before

pip-compile requirements.in

pip-sync requirements.txt


After

uv lock

uv sync --frozen

`


Command Reference


Essential Commands


`bash

Project management

uv init [PATH] # Initialize project

uv add PACKAGE # Add dependency

uv remove PACKAGE # Remove dependency

uv sync # Install dependencies

uv lock # Create/update lockfile


Virtual environments

uv venv [PATH] # Create venv

uv run COMMAND # Run in venv


Python management

uv python install VERSION # Install Python

uv python list # List installed Pythons

uv python pin VERSION # Pin Python version


Package installation (pip-compatible)

uv pip install PACKAGE # Install package

uv pip uninstall PACKAGE # Uninstall package

uv pip freeze # List installed

uv pip list # List packages


Utility

uv cache clean # Clear cache

uv cache dir # Show cache location

uv --version # Show version

`


Resources


  • Official documentation: https://docs.astral.sh/uv/
  • GitHub repository: https://github.com/astral-sh/uv
  • Astral blog: https://astral.sh/blog
  • Migration guides: https://docs.astral.sh/uv/guides/
  • Comparison with other tools: https://docs.astral.sh/uv/pip/compatibility/

Best Practices Summary


1. Use uv for all new projects - Start with uv init`

2. Commit lockfiles - Ensure reproducible builds

3. Pin Python versions - Use .python-version

4. Use uv run - Avoid manual venv activation

5. Leverage caching - Let uv manage global cache

6. Use --frozen in CI - Exact reproduction

7. Keep uv updated - Fast-moving project

8. Use workspaces - For monorepo projects

9. Export for compatibility - Generate requirements.txt when needed

10. Read the docs - uv is feature-rich and evolving

Informacion

Estado
Activo
Origen upstream
Usos 3
Ultimo uso 23/01 16:57
Actualizado 09/01/2026 02:14

Archivo origen

Z:\Repositorios\core\upstream\plugins\python-development\skills\uv-package-manager\SKILL.md