早期的时候,我们通常使用pip + requirements.txt 来管理版本依赖。但是最近几年出现了很多更亮眼的工具,uv就是其中之一。
uv的优势:
uv 是用 Rust 编写的,其依赖解析和安装速度比 pip 快 10 到 100 倍。它支持并发下载、智能缓存和预编译二进制文件的优先选择。这意味着你的 CI/CD 流水线构建时间可以从几分钟缩短到几秒钟,极大地提升了开发和运维效率。
uv 通过 uv.lock 或 requirements.lock 文件精确锁定每一个直接和传递依赖的版本号以及其内容的哈希值。只要使用这个锁定文件进行安装(uv pip install -r requirements.lock),就能保证在任何机器、任何时间点安装的依赖树都是完全一致的。这对于生产环境的稳定性和可预测性至关重要。
uv 会对下载的每个包进行严格的哈希校验(SHA-256)。如果网络传输过程中数据损坏,或者仓库中的包被恶意篡改,uv 会立即检测到并报错,防止有问题的代码进入生产环境。
uv 拥有更先进的依赖解析算法,能够更快、更准确地找到满足所有约束的依赖组合,并提供清晰的错误报告,帮助你快速定位和解决问题。
方式一 官方安装脚本(推荐)
执行:curl -LsSf https://astral.sh/uv/install.sh| sh
安装完成后按提示将 $HOME/.local/bin 加入 PATH(脚本通常会自动写入,如未写入可手动追加到 ~/.bash_profile 或 ~/.bashrc 并执行 source 使其生效)。
方式二 使用 pip 安装
建议先准备 Python ≥ 3.8 与 pip,然后执行:pip install uv
验证:uv --version 应输出版本号(如 0.9.x)
不指定版本(默认用当前环境的python相同版本)
创建虚拟环境命令:uv venv .venv
例子:
root@vm-01:~/apps/code/cmdb
> uv venv .venv
Using CPython 3.12.11 interpreter at: /usr/local/miniforge3/bin/python3
Creating virtual environment at: .venv
Activate with: source .venv/bin/activate
(.venv) (base)
root@vm-01:~/apps/code/cmdb
> ls -la
total 0
drwxr-xr-x 3 root root 19 Nov 21 17:29 .
drwxr-xr-x 3 root root 18 Nov 21 17:29 ..
drwxr-xr-x 4 root root 97 Nov 21 17:29 .venv指定 Python版本
创建虚拟环境命令 uv venv .venv --python=3.9.12 (需系统已安装对应 python3.x)
例子:
root@vm-01:~/apps/code/cmdb
> rm -fr .venv # 删除之前的虚拟环境
root@vm-01:~/apps/code/cmdb
> uv venv .venv --python=3.9.12 # 如果本地不存在对应的版本,会自动去网上下载
Using CPython 3.9.12
Creating virtual environment at: .venv
Activate with: source .venv/bin/activate
(.venv) (base)
root@vm-01:~/apps/code/cmdb
> ls -la
total 0
drwxr-xr-x 3 root root 19 Nov 21 17:30 .
drwxr-xr-x 3 root root 18 Nov 21 17:29 ..
drwxr-xr-x 4 root root 97 Nov 21 17:30 .venv
可以看下目前的python版本,可以看到默认已经激活了当前的虚拟环境
(.venv) (base)
root@vm-01:~/apps/code/cmdb
> python --version
Python 3.14.0激活虚拟环境
切换到项目目录下,执行 source .venv/bin/activate安装包:uv pip install 包名 或 uv pip install -r requirements.txt
生成锁定文件:uv pip compile pyproject.toml -o requirements.txt
精确同步环境:uv pip sync requirements.txt安装时可以临时使用镜像,例如:
uv pip install 具体的包名 -i https://pypi.tuna.tsinghua.edu.cn/simple这是最传统的方式
1 创建或编辑 requirements.txt:
在这个文件中,你可以指定你想要的包和可选的版本约束。
# requirements.txt
requests>=2.28.0
click~=8.0.0
black2 运行 uv pip compile 命令:
这个命令会解析 requirements.txt 中的依赖关系,并递归地解决所有传递依赖,最终生成一个完全锁定的 requirements.lock 文件。
uv pip compile requirements.txt -o requirements.lock
说明:
uv pip compile: 这是用于生成锁定文件的命令。
requirements.txt: 输入的依赖规范文件。
-o requirements.lock: 指定输出的锁定文件名。3 查看锁定文件:
执行后,你会得到一个 requirements.lock 文件。它的内容类似于:
# This file was autogenerated by uv via the following command:
# uv pip compile requirements.txt -o requirements.lock
black==25.11.0
# via -r requirements.txt
certifi==2025.11.12
# via requests
charset-normalizer==3.4.4
# via requests
click==8.0.4
# via
# -r requirements.txt
# black
idna==3.11
# via requests
mypy-extensions==1.1.0
# via black
packaging==25.0
# via black
pathspec==0.12.1
# via black
platformdirs==4.5.0
# via black
pytokens==0.3.0
# via black
requests==2.32.5
# via -r requirements.txt
urllib3==2.5.0
# via requests如果你的项目使用 pyproject.toml 来管理依赖(遵循 PEP 621 标准),uv 可以直接读取它。
在 pyproject.toml 中定义依赖:
# pyproject.toml
[
build-system
]
requires = ["setuptools>=45", "wheel"]
build-backend = "setuptools.build_meta"
[
project
]
name = "my-project"
version = "0.1.0"
dependencies = [
"requests>=2.28.0",
"click~=8.0.0",
"black",
]
编译并生成锁定文件:
uv pip compile pyproject.toml -o requirements.lock
uv 会自动识别 pyproject.toml 并从中提取 [project.dependencies]。
方法三:从当前环境导出锁定状态
如果你想将当前虚拟环境中已安装的所有包的状态锁定下来,可以使用 pip freeze 的方式,然后用 uv 编译。
# 首先,生成当前环境的包列表
pip freeze > requirements-frozen.txt
# 然后,让 uv 基于这个冻结的列表生成带有哈希的锁定文件
uv pip compile requirements-frozen.txt -o requirements.lock
注意:这不如前两种方法推荐,因为它可能包含一些不必要的传递依赖或开发工具。生成 requirements.lock 文件后,你应该在生产环境或需要可复现环境的地方使用它来进行安装,而不是使用原始的 requirements.txt。
# 使用锁定文件进行安装,确保每次安装的都是完全相同的包版本
> uv pip install -r requirements.lock 原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。