4 min read
Python's uv Is Mismarketed: It's Not About Speed

I’m a big fan of the Python package manager uv. A big fan. I’ll shudder using the word, but it has unironically been a ‘game-changer’ for me.

My appreciation for uv is probably why I’ve been so confused lately by how few Python developers have even come across it. I see this at work, but I also see this a lot on Twitter, where people still seem convinced that Python tooling sucks.

My pet theory for uv’s somewhat leisurely rise to Python stardom is its one sentence tagline, which the Astral team use on uv’s Github page and on its website.

An extremely fast Python package and project manager, written in Rust.

On the face of it, this seems perfectly descriptive, and I can see why Astral went with this line. It’s in keeping with their other tools like Ruff, and at this point, it’s basically obligatory for any self-respecting Rust project to describe itself as ‘blazingly fast’ (or some variant of).

That said - and yes this is a massive nitpick - it’s probably not optimal copywriting. What is it failing to communicate?

Yes, uv is fast. Really fast. When your CI/CD pipeline drops from 5 minutes to 30 seconds and when your Docker builds shrink, speed like this actually matters. And this does have a compounding effect when it’s used day-to-day. But even then, speed isn’t quite the main appeal of uv for me, and I suspect it’s not the appeal of uv for most Python developers who use it, nor ‘would-be’ uv converts.

The rest of the description also falls a little flat. Yes, uv is also a “package and project manager”, and it’s also written in Rust. But what does this add? While I’m sure this matters to the Rust community, Python developers aren’t getting hung up on what language their developer tools are built with. They just want a good tool.

The Real Problem uv Solves

The fundamental problem uv solves - and where it should focus its messaging - is tool sprawl. Python workflows used to be a Frankenstein’s monster of different tools, each with their own configuration files and their own ways of breaking.

uv has killed this monster. It’s become a complete Python toolchain replacement.

  • Package management: Replaces pip, pip-tools, pipenv, poetry
  • Virtual environments: Replaces venv, virtualenv, conda
  • Project scaffolding: Replaces cookiecutter and copier for simple cases
  • Script running: Replaces manual activation/deactivation
  • Building: Replaces build, setuptools directly
  • Publishing: Replaces twine
  • Python versioning: Replaces pyenv

This means no more remembering which tool does what, everything lives in pyproject.toml, and every commonly used command starts with uv, with effortlessly memorable syntax.

This was presumably what Astral intended to communicate with “project manager”, but Python developers don’t have a frame of reference for what this means in the context of Python tooling.

uv is a unified tool that just happens to be blazingly fast. That’s why it’s winning (gradually), and that’s why I think the copywriting misses the mark.