关于 python 的依赖管理,为什么很多人都在提倡用 uv
大家都在提倡新工具、放弃旧工具时,我该如何判断?
1. 评估动机而非跟风
- 问自己:这个工具解决了我的什么痛点?
- 如果现有工具已经够用,新工具的边际收益是什么?
2. 渐进式探索
- 先在个人小项目试用
- 在非关键路径上实验
- 观察社区成熟度和问题解决速度
3. 成本收益分析
- 学习成本:是否容易上手?
- 迁移成本:替换现有方案的代价?
- 长期维护:社区是否活跃?是否有大公司支持?
- 是否收费:公司内使用,是否会被邮件警告
4. 保持技术多样性
- 不要把所有项目都切换到新技术
- 维持一定的”技术组合”,降低风险
- 新旧工具并存,根据场景选择
5. 关注信号而非噪音
- 真实用户反馈 > 营销宣传
- 生产环境案例 > 玩具项目
- 长期趋势 > 短期热度
uv 为什么比较火
uv 的优势:
- 速度极快 - 用 Rust 编写,比 pip/poetry 快 10-100 倍
- 功能全面 - 集成了包管理、虚拟环境、Python 版本管理等
- 兼容性好 - 可以直接替代 pip,学习成本低
- 现代设计 - 借鉴了其他语言生态系统的优秀实践
是否需要使用 uv?这取决于使用场景:
- 适合尝试 uv 的情况:
- 新项目,没有历史包袱
- 对速度有要求(大型项目、CI/CD)
- 想简化工具链(替代 pip + venv + pyenv)
- 个人项目,可以自由选择
- 可以暂缓的情况:
- 团队已有成熟的工作流(如 Poetry)
- 项目依赖复杂,迁移成本高
- 需要等待生态更成熟
安装 uv
Windows
方式一:默认安装,会安装到C盘
1 | PS D:\software> powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex" |
方式二:自定义安装位置(推荐)
step1:创建我的自定义目录:D:\software\uv
step2:在系统变量中新建变量
1 | UV_HOME D:\software\uv |
在 Path 变量里只新建一行:%UV_HOME%
在 powershell 中输入 $env:UV_INSTALL_DIR 确定已经配置好环境变量。
执行安装命令:
1 | powershell -c "irm https://astral.sh/uv/install.ps1 | iex" |
step3:验证,重新打开一个窗口
1 | where.exe uv |
Linux
1 | $ curl -LsSf https://astral.sh/uv/install.sh | sh |
创建虚拟环境
uv 可以直接替代 pip 和 virtualenv 的常用命令 Astral,先从熟悉的工作流开始:
创建虚拟环境:
1 | # 传统方式: python -m venv .venv |
在 windows 上执行详情,会在当前目录下生成一个 .venv 的目录
1 | >uv venv |
Windows:
1 | D:\software>uvPython\Scripts\activate |
Linux:
1 | $ uv venv uvPython |
安装依赖:
1 | # 传统方式: pip install requests |
uv 的项目管理功能
这是 uv 的核心优势,类似于 Poetry,但更快:
初始化新项目:
1 | # 创建新项目 |
添加依赖:
1 | # 添加生产依赖,这些依赖会安装到当前目录中的 .venv 中 |
uv 的核心理念:Python 版本是项目属性,不是系统属性。
根据 uv 的项目隔离原则,uv init 创建的项目是自包含的:
- 每个项目有独立的
.venv - 依赖写入
pyproject.toml和uv.lock - 与外部环境(包括 uvPython)完全隔离
1 | # 如果在项目外的目录中执行 add 会提示报错 |
同步环境:
1 | # 根据 uv.lock 安装所有依赖 |
使用场景:
1 | # 1. 克隆项目后,首次设置环境 |
运行脚本:
1 | # uv 会自动确保环境同步 |
进阶功能
Python 版本管理
1 | # 安装 Python 版本 |
详情:
1 | (uv-learn) D:\work\username\uv_learn>uv python install 3.12 |
运行临时脚本
1 | # 无需安装,直接运行工具 |
管理开发工具
1 | # 全局安装工具 |
迁移现有项目
从 pip + virtualenv 迁移:
1 | # 1. 在项目目录中 |
如果有的包来自于内部服务器(需要指定 url),那么在 pyproject.toml 中添加以下内容:
1 | [[tool.uv.index]] |
常用命令速查
1 | # 环境管理 |
参考文档
- 官方文档:https://docs.astral.sh/uv/
- 实践指南:
- Real Python 教程:https://realpython.com/python-uv/
- SaaS Pegasus 深度指南:https://www.saaspegasus.com/guides/uv-deep-dive/
- 快速参考:
- GitHub 仓库:https://github.com/astral-sh/uv
- 命令对照表:pip → uv 的对应关系