Aiden Ghim


On uv

uv, the next-generation python package manager. I first tried it out a few days ago, mostly out of frustration regarding pip. I made the mistake (or rather, my brew dependency made the mistake) of downloading homebrew python, and pip refused to update packages due to an external installation.

Of course, I could spend an hour debugging path variables, matching versions, and brew doctor-ing packages. But uv suddenly came to mind, and it solved my problems within five minutes. My three most important takes on uv are below.

Rust’s influence is becoming ubiquitous. Not just that uv is written in Rust, which I learned days after my first use case. uv is nearly identical to Rust’s build toolchain, cargo. The subcomands, the toml project layout, and dependency scheme are laid out to feel instantly familiar to the Rust programmer. That was very pleasant, as I feel that cargo is one of the best build systems I have used thus far.

It’s fast, maybe even more so than the hype. Cache or no-cache, uv downloads, links, and creates virtual environments fast. This is not entirely fair of a comparison to pip, as the latter must still support legacy systems and guarantee ultra-stability, but it’s still great for the developer.

It’s hard to go back. Even when I had the chance to double back and resolve pip, I have been addicted to the cargo-like simplicity and sheer speed of uv. The fact that a uv scheme is reproducible can alleviate a whole class of problems, such as those of earlier python projects in which I had to deploy for my school’s outdated machine.

Toolchains evolve. It’s a wonder why it took this long, given python’s staggering popularity.