uv-优点(1)

9 阅读3分钟

uv是一个用 Rust 编写的、速度极快的 Python 包和项目管理器

亮点

安装方式:

[macOS 和 Linux]
curl -LsSf https://astral.sh/uv/install.sh | sh

[windows]
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"

🛠️ 典型应用场景

  1. 日常开发:用 uv pip install 极速安装依赖,替代 pip install
  2. 环境隔离:用 uv venv 一键创建虚拟环境,替代 virtualenv
# 创建虚拟环境
uv venv  #在 `.venv` 创建一个虚拟环境
uv venv my-name  #在 `my-name` 创建一个虚拟环境
uv venv --python 3.11  #使用 Python 3.11 创建一个虚拟环境
#激活虚拟环境
[macOS 和 Linux]
source .venv/bin/activate
[windows]
.venv\Scripts\activate

deactivate  # 退出虚拟环境
uv venv --seed  # 强制安装基础包(如pip, setuptools, wheel)
  1. 版本管理:用 uv python install 安装和管理多版本 Python,替代 pyenv
  2. 依赖锁定:自动生成 uv.lock,确保团队依赖一致。 例如,在 Python 项目中,通常会用 requirements.txt(或 pyproject.toml)记录依赖,比如你写了:
requests >= 2.20.0  #版本只要大于等于 2.20.0 就行

这种 “依赖版本不固定,会导致依赖不可重现,项目在不同环境、不同时间运行结果不一致” 的问题:

  • 你本地的版本和别人不一样:你今天安装可能拿到 2.28.0,你的同事明天安装可能拿到 2.31.0(期间官方发布了新版本)。
  • 新版本可能有兼容问题requests 2.31.0 可能修改了某个接口,导致你的项目在同事电脑上运行报错,而你本地却一切正常(“我的代码明明能跑,为什么你这不行?” 的经典场景)。
  • 跨环境不一致:你开发环境正常,部署到服务器上时,安装了更高版本的依赖,导致线上服务故障。
  • uv.lock:是 uv 生成的纯文本格式锁定文件,会记录下你当前环境中,所有依赖(包括主依赖、间接依赖)的「精确版本号」、下载来源、哈希值等信息,形成一份 “依赖快照”,可以把 “模糊依赖” 变成 “精确依赖”;它确保 “所有人安装的依赖完全一致” :当其他人拿到你的项目后,只要有这份 uv.lock,用 uv 安装依赖时,uv 会严格按照锁定文件中的精确版本、哈希值来安装,不会去下载任何新版本,哪怕官方已经发布了更高版本的 requests验证依赖完整性:锁定文件中的哈希值,可以验证下载的依赖包是否被篡改,避免安装恶意或损坏的包;用 uv 安装依赖后,uv 会自动生成 / 更新 uv.lock,里面不会有 >=<= 这种模糊符号,全是精确版本,比如:
    requests = { version = "2.28.2", source = "pypi", hash = "sha256:..." }
    urllib3 = { version = "1.26.14", source = "pypi", hash = "sha256:..." }
    (`urllib3` 是 `requests` 的间接依赖,没手动写,但它也会被精确记录)

官网:github.com/astral-sh/u…
文档:docs.astral.sh/uv/