Reviewed 6 September 2026

Part II: Practices

Environments and dependencies

uv covers the roles previously split across pip, pip-tools, virtualenv, pyenv, pipx and Poetry. It resolves and installs from a global cache shared across projects, linking packages into each environment rather than copying them, manages interpreter installations, and produces a cross-platform lockfile (uv.lock).

Command Purpose
uv init Create a project with pyproject.toml and a src/ layout.
uv add / uv remove Modify dependencies and update the lockfile.
uv sync --locked Install exactly what the lockfile specifies; fails if it is stale.
uv run Run a command in the project environment, syncing first.
uv python install 3.14 Install a specific interpreter version, independent of the system Python.
uv tool install Install a CLI package into an isolated environment on PATH.
uv build / uv publish Build wheels and source distributions, and upload them.

Because uv manages interpreters, the Python version is a project-level declaration (requires-python, .python-version) rather than a machine-level prerequisite. This matters more than it sounds: it is the difference between a repository that a colleague can build and one that requires a paragraph of setup instructions.

Alternatives still in use: Poetry (own resolver and poetry.lock, which predates the standardised format), PDM (standards-focused), Hatch (environment matrix management), and pip with pip-tools for projects that require pip alone.

Astral, which develops uv, ruff and ty, agreed to be acquired by OpenAI on 19 March 2026, subject to regulatory approval. The tools remain open source under permissive licences.