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. Of those who have at least heard of uv, few are tempted to try it. I see this at work, but it’s also borne out in conversations over social media, were 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. What is it failing to communicate? And why don’t people care?

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.

Yes, uv is also a “package and project manager”. But so what? We’ve had plenty of terrible package managers before.

Yes, uv is also made in Rust. But again, what is this supposed to add? While I’m sure this matters to Rustaceans, Python users aren’t going to get hung up on what language their developer tools are built with. They just want it to not be terrible.

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 isn’t just a package manager — it’s a complete Python toolchain replacement.

  • Package management: Replaces pip, pip-tools, pipenv
  • Virtual environments: Replaces venv, virtualenv, conda
  • Project scaffolding: Replaces cookiecutter 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. The future of Python tools is to only ever need one multi-tool.