Skip to content

你这个问题其实很适合用 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:

bash
curl -LsSf https://astral.sh/uv/install.sh | sh

或者:

bash
pip install uv

验证:

bash
uv --version

三、针对已有 requirements.txt 项目如何用 uv

假设你的项目结构:

project/
├── requirements.txt
├── main.py

✅ 方式一:直接用 uv 安装 requirements.txt(最简单)

进入项目目录:

bash
cd project

创建虚拟环境:

bash
uv venv

会自动生成:

.venv/

或指定python版本来创建虚拟环境:

查看可用的python版本:

uv python list

创建虚拟环境:

bash
uv venv --python 3.11

这会:

自动查找本机已有的 3.11

如果没有,会自动下载(uv 内置 Python 管理能力)

创建 .venv 目录

激活:

bash
source .venv/bin/activate

然后安装依赖:

bash
uv pip install -r requirements.txt

👉 这相当于 pip install -r 但速度更快。


✅ 方式二(推荐):把 requirements 转成 lock 模式

如果你想工程化一点(推荐做法),可以生成 lock 文件。

1️⃣ 生成锁定文件

bash
uv pip compile requirements.txt -o requirements.lock

这类似 pip-tools 的:

pip-compile

以后部署只用:

bash
uv pip sync requirements.lock

优点:

  • 完全可复现
  • CI/CD 稳定
  • 不会出现“我这边能跑你那边不行”

✅ 方式三:升级为 pyproject.toml 管理(现代方式)

如果你打算长期维护项目,建议升级为:

bash
uv init

会生成:

pyproject.toml

然后:

bash
uv add -r requirements.txt

uv 会把依赖写入 pyproject.toml,并生成:

uv.lock

以后只需要:

bash
uv sync

这已经类似于 poetry 体验。


四、推荐给你的工程化方案(结合你做搜索/组件项目)

如果是长期维护项目,我建议:

标准结构

project/
├── pyproject.toml
├── uv.lock
├── src/
├── tests/

流程:

bash
uv init
uv add fastapi
uv add redis
uv add sqlalchemy
uv sync

部署:

bash
uv sync --frozen

CI 里只要一行:

bash
uv sync --frozen

比 requirements.txt 清晰很多。


五、uv 常用命令速查

目的命令
创建虚拟环境uv venv
添加依赖uv add xxx
删除依赖uv remove xxx
安装 lockuv sync
安装 requirementsuv pip install -r
生成 lockuv pip compile

六、uv 与 pyenv 的对比

核心区别

能力pyenvuv
安装多个 Python 版本
切换全局 Python
项目级自动匹配版本⚠️(靠 .python-version)✅(靠 pyproject)
可以这么理解,但不完全等价

一句话总结:

uv 可以部分替代 pyenv, 但它的定位更偏向“现代一体化 Python 工具链”,而不是纯版本切换器。


pyenv 的定位

pyenv 本质是:

系统级 Python 版本切换器

特点:

  • 编译安装 Python
  • 改写 PATH
  • 支持 global / local / shell 三种版本

例如:

bash
pyenv install 3.11.8
pyenv global 3.11.8

它解决的是:

👉 “我系统要默认用哪个 Python”


uv 的定位

uv 是:

Python 版本管理 + 虚拟环境 + 包管理 + lock 管理 一体化工具

例如:

bash
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?

只有两种情况:

  1. 你需要修改系统默认 python
  2. 你必须用某些特殊编译参数构建 Python

否则:

👉 uv 足够覆盖 90% 场景


架构层面的本质区别

pyenv 是:

系统级 Python 管理器

uv 是:

项目级 Python 生态整合器

实际替代建议

如果你现在:

  • 还在用 pyenv + virtualenv
  • 再加 pip + pip-tools

可以直接升级为:

uv python install
uv venv
uv add
uv sync

一套打完。


七、和 pip 的对比总结

pip 时代uv 时代
virtualenvuv venv
pip installuv add
pip freezeuv lock
pip-tools内置 compile
手动同步uv sync

Released under the MIT License.