【uv项目承接与特点】自2023年以来作者首次有空承接新的项目。Astral的uv在Python世界掀起热潮它速度极快能轻松处理Python版本还能用一个二进制文件替代半打工具作者之前也写过多篇关于它的文章。【uv使用体验问题】使用uv开启新Python项目并添加首个依赖项简单但进入项目维护阶段与pnpm或Poetry等同类工具相比uv的命令行界面显得异常笨拙。【查找过时包难题】在JavaScript项目中运行“$ pnpm outdated”可清晰查看需更新的包。而uv中没有“uv outdated”命令需记住“$ uv tree --outdated --depth 1”且输出结果会显示整个顶级依赖树浏览不便。Poetry的“poetry show --outdated”命令虽也不佳但至少只显示真正过时的包。【默认版本约束差异】这是uv与pnpm和Poetry在理念上最显著的差异且对生产稳定性危险。pnpm和Poetry默认更新是安全的如pnpm以插入符要求形式写入“package.json”Poetry使用类似“1.23.4,2.0.0”格式。而uv运行“uv add pydantic”时在“pyproject.toml”中插入无上限的依赖其更新默认不安全批量更新会引入重大变更。【升级命令体验糟糕】uv中执行更新的命令感觉是为机器而非人类设计。pnpm或Poetry更新所有内容只需运行“pnpm update”或“poetry update”而uv要使用“$ uv lock --upgrade”该命令激进会将锁文件中的每个包升级到最新版本无视语义化版本控制的安全性。若想只升级特定包uv的语法繁琐需为每个包重复使用“--upgrade - package”标志。【bounds标志带来希望】uv最近为“uv add”引入“--bounds”选项如“$ uv add pydantic --bounds major”会产生更安全的约束“pydantic2.13.4,3.0.0”但目前是可选预览功能。在“--bounds major”成为默认行为前uv用户只能在手动编辑“pyproject.toml”添加上限和担心“uv lock --upgrade”引入重大版本变更这两个糟糕选项中选择。【期望的改进方向】作者喜欢uv的速度和管理Python工具链的方式但作为包管理器目前在维护项目方面的开发者体验比之前的工具退步。需要一个专门的“uv outdated”命令过滤无用信息一个更符合人体工程学、无需重复使用标志的“update”命令以及尊重语义化版本控制的默认版本约束。在此之前作者会仔细检查锁文件变更的每一行内容。【作者信息】作者是有超过25年经验的自由软件开发者撰写关于Swift、Python和TypeScript的文章参与过许多应用程序的开发维护着一堆开源项目目前接受雇佣可通过Mastodon、LinkedIn或电子邮件联系。【相关文章】包括“自动化Python包发布2025年7月30日”介绍维护Python包时在PyPI和GitHub上自动化创建新版本的方法“三种类型系统的故事Python、TypeScript和Swift 2025年6月19日”讲述将Saga从Swift移植到Python和TypeScript在类型系统方面的有趣实践。
uv虽快但包管理体验差:命令笨拙、更新不安全,改进之路在何方?
发布时间:2026/5/23 4:04:27
【uv项目承接与特点】自2023年以来作者首次有空承接新的项目。Astral的uv在Python世界掀起热潮它速度极快能轻松处理Python版本还能用一个二进制文件替代半打工具作者之前也写过多篇关于它的文章。【uv使用体验问题】使用uv开启新Python项目并添加首个依赖项简单但进入项目维护阶段与pnpm或Poetry等同类工具相比uv的命令行界面显得异常笨拙。【查找过时包难题】在JavaScript项目中运行“$ pnpm outdated”可清晰查看需更新的包。而uv中没有“uv outdated”命令需记住“$ uv tree --outdated --depth 1”且输出结果会显示整个顶级依赖树浏览不便。Poetry的“poetry show --outdated”命令虽也不佳但至少只显示真正过时的包。【默认版本约束差异】这是uv与pnpm和Poetry在理念上最显著的差异且对生产稳定性危险。pnpm和Poetry默认更新是安全的如pnpm以插入符要求形式写入“package.json”Poetry使用类似“1.23.4,2.0.0”格式。而uv运行“uv add pydantic”时在“pyproject.toml”中插入无上限的依赖其更新默认不安全批量更新会引入重大变更。【升级命令体验糟糕】uv中执行更新的命令感觉是为机器而非人类设计。pnpm或Poetry更新所有内容只需运行“pnpm update”或“poetry update”而uv要使用“$ uv lock --upgrade”该命令激进会将锁文件中的每个包升级到最新版本无视语义化版本控制的安全性。若想只升级特定包uv的语法繁琐需为每个包重复使用“--upgrade - package”标志。【bounds标志带来希望】uv最近为“uv add”引入“--bounds”选项如“$ uv add pydantic --bounds major”会产生更安全的约束“pydantic2.13.4,3.0.0”但目前是可选预览功能。在“--bounds major”成为默认行为前uv用户只能在手动编辑“pyproject.toml”添加上限和担心“uv lock --upgrade”引入重大版本变更这两个糟糕选项中选择。【期望的改进方向】作者喜欢uv的速度和管理Python工具链的方式但作为包管理器目前在维护项目方面的开发者体验比之前的工具退步。需要一个专门的“uv outdated”命令过滤无用信息一个更符合人体工程学、无需重复使用标志的“update”命令以及尊重语义化版本控制的默认版本约束。在此之前作者会仔细检查锁文件变更的每一行内容。【作者信息】作者是有超过25年经验的自由软件开发者撰写关于Swift、Python和TypeScript的文章参与过许多应用程序的开发维护着一堆开源项目目前接受雇佣可通过Mastodon、LinkedIn或电子邮件联系。【相关文章】包括“自动化Python包发布2025年7月30日”介绍维护Python包时在PyPI和GitHub上自动化创建新版本的方法“三种类型系统的故事Python、TypeScript和Swift 2025年6月19日”讲述将Saga从Swift移植到Python和TypeScript在类型系统方面的有趣实践。