你这个问题其实很适合用 uv 来做现代化改造 👍 —— 尤其你平时做工程化、封装组件比较多,用 uv 可以把 Python 项目的依赖管理做得非常干净。
下面给你一套 面向已有 requirements.txt 项目 的完整迁移方式。
uv 工具
一、uv 是什么
uv 是 uv(由 Astral 开发)推出的超快 Python 包管理器 + 虚拟环境工具。
它可以替代:
- pip
- pip-tools
- virtualenv
- 部分 poetry 功能
特点:
- 极快(Rust 写的)
- 自动管理虚拟环境
- 支持 requirements.txt
- 支持 pyproject.toml
- 可生成 lock 文件
二、安装 uv
Linux / macOS:
curl -LsSf https://astral.sh/uv/install.sh | sh或者:
pip install uv验证:
uv --version三、针对已有 requirements.txt 项目如何用 uv
假设你的项目结构:
project/
├── requirements.txt
├── main.py✅ 方式一:直接用 uv 安装 requirements.txt(最简单)
进入项目目录:
cd project创建虚拟环境:
uv venv会自动生成:
.venv/或指定python版本来创建虚拟环境:
查看可用的python版本:
uv python list创建虚拟环境:
uv venv --python 3.11这会:
自动查找本机已有的 3.11
如果没有,会自动下载(uv 内置 Python 管理能力)
创建 .venv 目录
激活:
source .venv/bin/activate然后安装依赖:
uv pip install -r requirements.txt👉 这相当于 pip install -r 但速度更快。
✅ 方式二(推荐):把 requirements 转成 lock 模式
如果你想工程化一点(推荐做法),可以生成 lock 文件。
1️⃣ 生成锁定文件
uv pip compile requirements.txt -o requirements.lock这类似 pip-tools 的:
pip-compile以后部署只用:
uv pip sync requirements.lock优点:
- 完全可复现
- CI/CD 稳定
- 不会出现“我这边能跑你那边不行”
✅ 方式三:升级为 pyproject.toml 管理(现代方式)
如果你打算长期维护项目,建议升级为:
uv init会生成:
pyproject.toml然后:
uv add -r requirements.txtuv 会把依赖写入 pyproject.toml,并生成:
uv.lock以后只需要:
uv sync这已经类似于 poetry 体验。
四、推荐给你的工程化方案(结合你做搜索/组件项目)
如果是长期维护项目,我建议:
标准结构
project/
├── pyproject.toml
├── uv.lock
├── src/
├── tests/流程:
uv init
uv add fastapi
uv add redis
uv add sqlalchemy
uv sync部署:
uv sync --frozenCI 里只要一行:
uv sync --frozen比 requirements.txt 清晰很多。
五、uv 常用命令速查
| 目的 | 命令 |
|---|---|
| 创建虚拟环境 | uv venv |
| 添加依赖 | uv add xxx |
| 删除依赖 | uv remove xxx |
| 安装 lock | uv sync |
| 安装 requirements | uv pip install -r |
| 生成 lock | uv pip compile |
六、uv 与 pyenv 的对比
核心区别
| 能力 | pyenv | uv |
|---|---|---|
| 安装多个 Python 版本 | ✅ | ✅ |
| 切换全局 Python | ✅ | ❌ |
| 项目级自动匹配版本 | ⚠️(靠 .python-version) | ✅(靠 pyproject) |
| 可以这么理解,但不完全等价。 |
一句话总结:
uv 可以部分替代 pyenv, 但它的定位更偏向“现代一体化 Python 工具链”,而不是纯版本切换器。
pyenv 的定位
pyenv 本质是:
系统级 Python 版本切换器
特点:
- 编译安装 Python
- 改写 PATH
- 支持 global / local / shell 三种版本
例如:
pyenv install 3.11.8
pyenv global 3.11.8它解决的是:
👉 “我系统要默认用哪个 Python”
uv 的定位
uv 是:
Python 版本管理 + 虚拟环境 + 包管理 + lock 管理 一体化工具
例如:
uv python install 3.11
uv venv --python 3.11
uv add fastapi
uv sync它解决的是:
👉 “我的项目用哪个 Python + 哪些依赖”
关键区别:作用域不同
🔵 pyenv —— 控制系统
- 修改 shell PATH
- 改变
python命令指向 - 影响所有项目
🟢 uv —— 控制项目
- 不修改系统 python
- 每个项目独立虚拟环境
- 自动下载匹配 Python
- 用 lock 保证可复现
从工程角度看(结合你工程化思维)
你平时做:
- 组件封装
- 工程脚本
- 可复用工具类
- 多项目并存
那 uv 更适合。
原因:
- 不污染系统
- 每个项目独立
- CI 友好
- Docker 友好
- 不需要再装 virtualenv / pip-tools
什么时候还需要 pyenv?
只有两种情况:
- 你需要修改系统默认 python
- 你必须用某些特殊编译参数构建 Python
否则:
👉 uv 足够覆盖 90% 场景
架构层面的本质区别
pyenv 是:
系统级 Python 管理器uv 是:
项目级 Python 生态整合器实际替代建议
如果你现在:
- 还在用 pyenv + virtualenv
- 再加 pip + pip-tools
可以直接升级为:
uv python install
uv venv
uv add
uv sync一套打完。
七、和 pip 的对比总结
| pip 时代 | uv 时代 |
|---|---|
| virtualenv | uv venv |
| pip install | uv add |
| pip freeze | uv lock |
| pip-tools | 内置 compile |
| 手动同步 | uv sync |