Comment by rbanffy
7 days ago
> 2. It's not dog slow.
That’s very subjective. I have ADHD and I’m very sensitive to things that break my flow, but I don’t run pip frequently while I’m writing code, and the couple extra seconds it takes to do its job don’t bother me that much.
> 3. It automatically sets up venvs.
Remember: explicit is better than implicit.
> 4. It automatically activates the venv before running commands.
Again: explicit is better than implicit.
> 5. It supports a lock file out of the box.
Some (me included) would say it’s a bug, not a feature.
> 6. It lets you specify the index for private packages. This fixes a major security issue with pip that they continue to ignore.
This is good - a lot of organisations concerned with that will block access to PyPI altogether and offer a selected cache for approved dependencies. Alternatively you can declare private dependencies as Git URLs with tags, bypassing the need for a private index.
> 7. It installs your code in the venv in editable more by default.
That’s a nice touch, but goes against the explicit/implicit rule- a different behaviour automatically triggered by something environmental.
> 8. It lets you install Python tools outside the venv (`uv tool install`).
I always recommend not messing with the system’s Python.
> 9. It works reliably.
I’ll need you to elaborate on that. I might be used to the way pip works, but it’s been a while since I had it fail to do something I asked without there being a very good reason (an impossible conflicting requirement).
This brings me to another concern - I wouldn’t want Python development to become more like JavaScript post-npm. Every external dependency you bring in must be justified and understood. This goes for simple ones and especially for complex ones with lots of secondary dependencies. Any external dependency you bring is now your responsibility to manage forever. I’m fine not having to reimplement NumPy’s MSE function or Django’s ORM, but I’ve moved away from things like click because they save me just a little extra work at the cost of having to remember it’s there forever.
> And if you've never run into any of those issues I guess you either haven't used Python much or didn't consider that there might be a less shitty way to do things.
Or, perhaps, I’ve been using Python since 1.5 and have a deep understanding of why things are the way they are, having experimented with different ways, and just learned that new and convenient isn’t always the best in the long term.
> Remember: explicit is better than implicit.
It's not implicit. When you run `uv run ...` or `uv sync` you are explicitly asking it to automatically set up a venv.
> Some (me included) would say it’s a bug, not a feature.
Some (you included) would be wrong.
> This is good
What is good? That Pip doesn't have a way to avoid dependency confusion? What??
> but goes against the explicit/implicit rule
No it doesn't. It just does the right thing by default.
> I always recommend not messing with the system’s Python.
The reasons to avoid `pip install pre-commit` (outside a venv) are precisely because Pip can't do that in a sane way! `uv tool install pre-commit` suffers from none of the reasons to avoid `pip install pre-commit`.
You definitely have stockholm syndrome. Give uv a try.