最近考虑将公司现有的 pip 项目迁移到更现代的包管理工具,并且在 uv 和 Poetry 之间权衡。之前在django项目中使用过poetry,感觉也挺好用,查看他们官网文档做了一个对比
🧩 工具核心特性速览
| 特性维度 | uv | Poetry |
|---|---|---|
| 核心优势 | 极致速度(比 pip 快 10-100 倍) | 一体化体验(依赖管理 + 打包发布) |
| 定位 | 极速的包管理器与项目环境管理工具 | 全功能的项目依赖管理与打包工具 |
| 锁文件 | uv.lock |
poetry.lock |
| 虚拟环境 | 自动创建和管理,无需手动激活 | 自动创建和管理 |
| 打包发布 | 不支持 | 内置支持 |
| 学习曲线 | 相对平缓,命令直观 | 中等,需要理解其项目结构和配置 |
💡 如何选择:从项目需求出发
表格展示了工具的核心差异,您的选择应基于项目的具体需求:
选择
uv的理由:如果追求极致的依赖安装速度(特别是在 CI/CD 流水线中),希望工具轻量、快速上手,并且项目目前只需要管理依赖和环境,没有打包发布的需求。它的uv run命令能自动处理环境,让您专注于编码。选择
Poetry的理由:如果您的项目未来需要打包成库或应用并发布到 PyPI 等平台,或者您非常看重依赖声明、打包发布在一个工具内完成的一体化体验。结论:这样一对比,uv就更适合我当前的项目,我没有打包发布的需求,同时作为敏捷开发,代码变更频繁,对于CICD的执行速度有要求。
🚀 从 Pip 迁移到 uv 的简明步骤
如果您决定尝试 uv,迁移过程非常平滑,可以遵循以下步骤:
- 安装 uv:
curl -LsSf https://astral.sh/uv/install.sh | sh
安装后,重新打开终端即可使用。
-
项目初始化:在您的项目根目录下执行:
uv init这个命令会创建一个基本的
pyproject.toml文件,不会影响您的现有代码。 导入现有依赖:这是最关键的一步,将
requirements.txt中的依赖导入到新体系,--no-sync表示只加入project.toml的依赖中,如果不带则会一次性安装:
uv add -r requirements.txt --no-sync
此命令会读取 requirements.txt,将依赖项写入 pyproject.toml,并生成锁文件 uv.lock。
- 同步环境:确保您的本地环境与锁文件一致,这里sync时可以按组分类,只安装部分数据:
uv sync # 安装所有依赖(包括生产依赖和所有可选组)
uv sync --group dev # 仅安装生产依赖和 dev 组的依赖
uv sync --no-dev # 仅安装生产依赖,不安装任何可选组的依赖
-
验证迁移:使用 uv 运行您的项目,检查是否正常:
uv run python your_main_script.py
完成迁移后,日常使用 uv add <package_name>来添加新依赖,使用 uv run来执行命令即可。
6.兼容pip:pip与uv是可以共存的,如果想要留一段时间去给团队适应,可以执行下面命令,根据uv的lock去生成依赖文件
uv pip compile pyproject.toml -o requirements.txt
清理缓存的具体操作
-
清理所有缓存:执行以下命令可以清除 uv 的全部缓存数据 。
uv cache clean -
清理特定包的缓存:如果你只想删除某个特定包(例如
numpy)的缓存,可以使用remove子命令 。uv cache remove <package_name> # 例如,清理 numpy 的缓存 uv cache remove numpy
缓存的存储位置
uv 的缓存通常存储在系统的特定目录下,了解这些位置有助于你手动检查或必要时进行彻底清理 :
-
Linux/macOS:
$HOME/.cache/uv -
Windows:
%LOCALAPPDATA%\uv\cache
缓存机制的优势
uv 的缓存机制是其速度快的重要原因之一。它会缓存下载的包和构建的 wheel 文件,避免重复的网络请求和编译工作,从而显著提升后续安装依赖的速度 。因此,通常只有在遇到安装问题或需要释放磁盘空间时,才需要进行缓存清理。
💎 总结与建议
简单来说,可以遵循这个决策思路:要速度快、够轻量,选 uv;要功能全、能打包,选 Poetry。
uv与pip的执行速度提升
- pip执行时间
uvicorn-0.34.0 uvloop-0.22.1 watchfiles-1.1.1 websockets-15.0.1 yarl-1.22.0
[notice] A new release of pip available: 22.3.1 -> 25.3
[notice] To update, run: pip install --upgrade pip
pip install -r requirements.txt 50.47s user 3.25s system 32% cpu 2:45.49 total
- uv执行时间
+ uvicorn==0.34.0
+ uvloop==0.22.1
+ watchfiles==1.1.1
+ websockets==15.0.1
+ yarl==1.22.0
uv sync 4.20s user 2.50s system 10% cpu 1:02.75 total