
🐍 uv: blazing speed, but a disappointing package management UX
Astral’s uv has taken the Python world by storm with its speed and ability to replace multiple tools. But once you enter the maintenance phase of a project, the user experience starts to crack.
🔍 The concrete problems:
- ❌ No
uv outdatedcommand: you must useuv tree --outdated --depth 1, which shows all dependencies, not just outdated ones - ⚠️ No upper version bound by default:
uv add pydanticgeneratespydantic>=2.13.4with no maximum cap, which can silently pull in breaking changes - 🔁 Upgrading specific packages is tedious: you must repeat
--upgrade-packagefor every package instead of listing them together - 🔧 The upgrade command is
uv lock --upgrade, not the intuitiveuv updateoruv upgrade
✅ There is hope: the new --bounds major flag in uv add allows adding safe version constraints… but it is opt-in and still experimental.
💡 Explanation in a nutshell#
uv is a tool for installing packages and managing Python versions. It is extremely fast, but its commands for checking which packages are outdated and updating them safely are cumbersome and can cause problems if not used carefully. Compared to tools like pnpm or Poetry, the experience is less intuitive.
More information at the link 👇
