uv is one of the best things that happened to Python

Discover why uv is revolutionizing Python development. With blazing speed, unified tooling, and deterministic dependency resolution, uv replaces pip, venv, and pip-tools with a single, Rust-powered solution that’s faster, simpler, and more reliable.

uv is one of the best things that happened to Python
Photo by Jean Gerber / Unsplash

Python's ecosystem has evolved significantly over the years, but package management and virtual environments have been one of the biggest pain points of python. While tools like pip, virtualenv, and venv have improved the experience, they often feel slow or clunky, especially for large-scale projects.

And this is when uv comes to rescue; a lightning-fast Python package manager and virtual environment tool that redefines how we handle dependencies. Built for speed and efficiency, uv is the best thing that has happened to Python in recent years, surpassing previous tools by integrating package management, virtual environments, and dependency resolution into a single, high-performance solution.

Why uv is a Game Changer

It's blazing Fast

uv is written in Rust, making it significantly faster than traditional tools like pip and virtualenv. Installing, resolving dependencies, and setting up virtual environments take a fraction of the time.

Some happy user on X praising love for uv.

Unified Tooling

With uv, there's no need for multiple tools. It combines the functionalities of pip, venv, and pip-tools in a single package. This means:

  • No more juggling between pip install, python -m venv, and pip-compile. You just uv sync and it automatically creates a .venv Python virtual environment and installs all the dependencies defined in your pyproject.toml .
  • You want to package it? uv build .
  • You want to publish it? uv publish.

Deterministic Dependency Resolution

Unlike pip, which sometimes struggles with dependency conflicts, uv provides deterministic dependency resolution similar to poetry. This ensures that the same environment can be reproduced reliably across different machines. Similar to poetry.lock, you will find uv.lock.

Seamless Package Management

Installing and managing dependencies is smoother than ever:

uv add pandas

No need for pip installuv integrates this seamlessly while being much faster.

Python as a tool (for real)

You can also run python tools without caring environments or setting up projects. Similar to npx or pipx, you have uv tool or uvx.

For example. If you want to launch a REST Client on the terminal:

uvx posting

And voilà:

This opens up the posibilty to remove lots of tooling for your projects. For example, no need to add ruff as a dev dependency anymore, so you can just:

uvx ruff check

Do you want to always execute the latest version? no problem:

uvx ruff@latest check

This will always run the latest ruff version.

Cargo-like packaging with uv workspaces

uv uses a packaging approach similar to Rust cargo packages, which makes Python projects easier to manage, using workspaces—a way to group multiple packages (like microservices or libs) in one repo—without needing editable installs, symlinks, or complex tooling.

albatross
├── packages
│   ├── bird-feeder
│   │   ├── pyproject.toml
│   │   └── src
│   │       └── bird_feeder
│   │           ├── __init__.py
│   │           └── foo.py
│   └── seeds
│       ├── pyproject.toml
│       └── src
│           └── seeds
│               ├── __init__.py
│               └── bar.py
├── pyproject.toml
├── README.md
├── uv.lock
└── src
    └── albatross
        └── main.py

From uv docs: an example of a workspace, albatross which has 2 dependencies: bird-feeder library and seeds library.

Works with Existing Workflows

uv doesn’t force you to change everything. It supports existing Python environments and integrates well with pip, requirements.txt, and other standard Python tooling. You can still compile your requirements.txt if your workflows need that:

uv export --format requirements-txt

Final Thoughts

I don't find any reasons to not to start using uv on your Python projects. It's fast, it's reliable and it's intuitive.

Python’s ecosystem has needed a tool like uv for a long time. It simplifies workflows, reduces overhead, and makes package management a joy rather than a chore. If you haven’t tried uv yet, now is the time.

Kudos to the Astral team for giving such a top notch standard on python tooling. First ruff, then uv. And they just announced a mypy alternative. And it looks promising:

Just 🤯

If you want to learn more on how to use uv, you can go there:

https://docs.astral.sh/uv/.