I prefer using a general tool manager like mise to manage runtime versions. It works consistently per language and doesn't change how you launch programs.
I had some thoughts about how things could improve, but the core developers said that anyone with their own ideas had better think through all of the implications, because packaging is super hairy.
The uv folks basically took that as a challenge, and said, "What if we have one package manager that replaces literally everything else in the packaging ecosystem, hiding the stuff that people find confusing or annoying?" Color me impressed; they really did it.
System-wide package installs are a weird quirk of my own work, since I'm doing very little product development and lots of one-off classes. I'm not at all recommending that "normal" developers do this, and I make sure to say that in all of the courses I teach.
Now, I'm not saying I learned anything from the article (I gave up when it was talking about "uv pip" which I have never ever used and have no real idea why anyone would ever use, but that's okay). I don't think the article is a good fit for the HN python audience, and that's also okay. But I don't doubt many people can find value in it. "uv pip" exists even though I have never used it so clearly someone must be using it. I haven't used pip in years so it's not a reference point I am starting from. People do use pip and that's okay. Those people didn't suffer through figuring out poetry etc.
I do suspect that people who do system install of packages want uv workspaces. I think I want to migrate to that for my less engineered one-off jupyter calculations stuff since so far the things I've managed to get working for that sort of project have been either monorepos (which have their own issues) or millions of venvs (which constantly sync and take up space). But again I've tried to read and figure out that uv workspaces workflow and I give up after an hour or so of not figuring it out. So that's just to say I have learned to only go to astral's docs as references and even then they are incomplete (I had to guess a bit how to add a git repo via ssh as a dependency)
So your points are all valid -- but I'm trying to address pain points people have repeatedly raised, and that I myself experienced, and flatten the learning curve for as many people as possible.
These type of titles convey some kind of 'i don't understand it/ did it wrong, therefor everybody must be doing something wrong, because I cannot be the one making the mistake here.'
This is right up there with: - 10 things you didn't know about XYZ - etc
Choose a better title
I'll give some unsolicited advice while on topic:
On Linux, on your development machine, don't use your system python for your venvs.
Your system's python belongs to your system, not to you. It's a critical system dependency and you don't want to depend on it not changing its version after a system update.
Uv makes it easy to download its own python, there is the env var UV_PYTHON_PREFERENCE=only-managed to make the system python disappear from uv completely.
Thank me later.
42lux•5h ago
>> But actually, that’s not quite true — I don’t really use virtual environments very much, so I would just install packages on my global Python installation
This is an absolute red flag especially for someone who teaches python.
reuven•5h ago
When I shared this post with them, my students said that it clarified things they didn't previously understand, even after reading the documentation. Part of the problem is that the documentation describes lots of options, rather than explicitly encouraging one particular path and model.
So I don't think it's just me; people are excited about uv, but aren't quite sure how to use it. But hey, I could be wrong!
As for your comment about venvs -- I teach them, I demonstrate them, and I use them when I work on programming projects.
I mostly create one-off Jupyter notebooks, which don't (in my opinion) merit their own venvs, because I don't care about locking versions. That said, I'm switching everything such that every class I teach will have not only a GitHub repo, but also a uv project, and thus an implicit venv behind the scenes. I still don't have to worry about package conflicts, but I want to be more in line with community conventions.