DEV Community

Moksh Gupta
Moksh Gupta

Posted on

Why uv Became the Go-To Python Package Manager in 2026

Installing 23 packages from a warm cache takes pip about 6.6 seconds, while uv handles the same task in just 0.12 seconds. On larger projects involving Django, Celery, Pandas, and scikit-learn, pip needs around 90 seconds, whereas uv finishes in roughly 8 seconds.

uv is a single binary that consolidates five separate tools into one: pip, pip-tools, virtualenv, pyenv, and pipx. In March 2026, OpenAI acquired Astral, the company behind uv, to bring it into their Codex AI platform.

What Tools Does uv Replace?

The traditional Python project setup required juggling five different tools, each with its own configuration format. uv streamlines this into a single, unified workflow:

  • pyenv install becomes uv python install
  • python -m venv becomes uv venv
  • pip install becomes uv add
  • pip-compile becomes uv lock
  • pipx install becomes uv tool install

Getting Started with uv

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

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

# Self-update
uv self update
Enter fullscreen mode Exit fullscreen mode

Core Workflows

New Project: Running uv init automatically updates pyproject.toml, regenerates uv.lock, and installs your dependencies. The uv run command handles execution, so you no longer need to manually activate virtual environments.

Python Version Management: uv can install multiple Python versions side by side (for example, uv python install 3.11 3.12 3.13) and automatically respects existing .python-version files.

Global CLI Tools: uv replaces pipx for running standalone CLI utilities like ruff or cowsay without polluting your global environment.

Performance Benchmarks

On a benchmark with a 200-package lockfile, uv completes the full resolve and install cycle in 1.5 seconds total (0.4s for resolving, 1.1s for installing). By comparison, pip takes 20.5 seconds and Poetry takes 16.0 seconds.

Migrating to uv

From pip: uv pip works as a drop-in replacement, supporting all standard pip flags so you can transition without changing your existing commands.

From Poetry: The migrate-to-uv utility converts your [tool.poetry] sections to the standard [project] format, making migration straightforward.

From pyenv: No changes are needed. uv reads your existing .python-version files directly, so the switch is seamless.

Using uv in CI/CD

- name: Install uv
  uses: astral-sh/setup-uv@v5
  with:
    version: "latest"
    enable-cache: true
- name: Install dependencies
  run: uv sync --frozen
Enter fullscreen mode Exit fullscreen mode

The --frozen flag ensures that dependencies match exactly what is in uv.lock, and enable-cache: true ensures that subsequent CI builds finish in seconds rather than minutes.

Known Limitations

  • Conda: uv does not replace Conda if your workflow depends on non-Python dependencies such as CUDA libraries or C extensions.
  • Plugins: There is currently no plugin system available.
  • Legacy support: Some setup.py-based packages may require uv pip install --no-build-isolation to build correctly.

Final Thoughts

uv replaces five separate tools with a single binary that runs 10 to 100 times faster. With backing from OpenAI and over 45,000 GitHub stars, it has become the go-to standard for Python dependency management. If you are still running pip install -r requirements.txt by hand, it is time to make the switch.

References

Top comments (0)