← Back to context

Comment by hallvard

10 hours ago

Why (keep) the `uv pip` interface?

We have the interface because we care a lot about meeting people where they are.

We keep the interface because we care a lot about long-term support and compatibility. I cannot imagine removing it.

We generally want to add features to the top-level interface such that people don't need or want to use the pip-interface because the top-level interface does everything you need, but better.

  • Laudable goals. Have you considered gating imperative commands behind a setting, maybe `tool.uv.pip.unreproducible = true` or somesuch? This would gently guide people towards better workflows, and also be a starting point for documenting the drawbacks of `uv pip` since it's a setting they'd be forced to add and presumably they'll read the docs for it first.

    uv already does something similar with `tool.uv.pip.break-system-packages`.

    • FWIW, break-system-packages comes directly from pip's interface, it's not a novel addition from uv.

      If Astral/OpenAI are willing to support uv pip in the long term, why do you think they should use a stick as well as a carrot to get people on uv's top level interface?

      While uv's standard workflows probably works for 80+% of people, at least if they learn them, I certain do a lot of stuff with uv pip and pip that can't be replicated.

      Also both uv pip and pip support installing from pylock.toml files, which are fully reproducible.

    • I hadn't considered that, it's an interesting idea. We generally hold a very high bar for nagging users or gating behaviors. It's possible we'll reach a point someday where this is appropriate! I think you're right that we need to teach people better workflows, but that's happening organically as use of the tool grows and people's first exposure to a Python project is `uv init` and `uv add` rather than `pip`.

      1 reply →

  • Fair points; the reason for asking is that it seems counterintuitive from the outside perspective for you to maintain/extend the pip interface as well?

    And of course that some colleagues of mine insist on using `uv pip` for anything and everything, which feels wrong…

    Granted it’s a great feature which made the transition to uv smooth in the first place.

    • So far the maintenance burden has been quite bearable and extending pip provides us with an opportunity to explore and encourage improvements upstream which are still beneficial to a lot of people.

It’s widely used, and there are still a lot of workflows that we hear about from users where they want/need to manually twiddle environments rather than having the “declarative” layer do it for them.

I'll confess to using `uv` almost every day for the last year+ - and I've never used anything other than `uv pip install` for package management.

Is there any compelling reason not to?

uv pip is a brilliant adoption gateway, you get all of the speed gains for a 3 char change

  • Agreed, I'd prefer it stick around for the long-term because I use it when creating temporary venvs to screw around with things that I'm not certain about committing to in my actual projects for example. I guess I could do that with scripts but it's nicer/easier to use uv pip