Python

I Switched to uv and Stopped Hating Python Package Management

Abhishek Ghimire · 2 min read
8 views

For years, requirements.txt was just something I tolerated. Then I tried uv — and dependency management went from a chore to a non-event. Here's my honest take on why I made the switch and never looked back.

I've been writing Python for years, and if there's one part of the workflow I never enjoyed, it was package management.

You know the drill. Create a virtualenv. Activate it. pip install a bunch of stuff. Then pip freeze > requirements.txt and pray the versions play nice on the next machine. Half the time they didn't. Someone would clone the repo, run pip install -r requirements.txt, and get a wall of red because some transitive dependency quietly broke.

It was boring. It was fragile. And honestly, I stopped thinking about it as "engineering" and started thinking of it as tax.

Then I tried uv.

The first thing that got me was the speed. Installing dependencies used to be a coffee break. With uv it's basically instant — like, "did it even run?" instant. It's written in Rust, and you feel it.

But the real win wasn't speed. It was that I stopped babysitting my environment.

No more manually creating venvs. No more pip freeze dumps full of packages I didn't actually ask for. uv handles the virtual environment, resolves dependencies properly, and keeps a clean lockfile so the next person (or the next machine, or future me) gets the exact same setup. Every time.

My whole flow now is basically:

uv init
uv add fastapi
uv run main.py

That's it. No activation dance. No requirements.txt drift. The pyproject.toml holds what I actually depend on, and the lockfile handles the rest.

I still remember the exact moment it clicked — I set up a fresh project on a new machine and everything just worked on the first try. No debugging, no version hunting. It felt weird, in a good way.

If you're still living in requirements.txt land and quietly dreading every dependency change, do yourself a favor and spend ten minutes with uv. The boring stuff finally becomes invisible, which is exactly what package management should be.

Written by

Abhishek Ghimire

Writes here about engineering, technology, and the things worth building.