Python uv 的极速依赖解析与安装

4次阅读

uv pip install 有时比 pip install 慢,因默认不复用 wheel 缓存、不启用并行解析与 abi 跳过检查;需手动指定 –python-platform、uv_cache_dir 等优化项。

Python uv 的极速依赖解析与安装

为什么 uv pip install 有时比 pip install 慢?

不是 uv 本身慢,而是默认行为没开加速开关。uv 默认不复用已下载的 wheel 缓存(尤其跨项目时),也不自动启用并行解析和二进制兼容性跳过检查——这些都得手动打开。

  • --no-deps--no-build-isolation 可能适得其反:uv 的强项在依赖图并行求解,砍掉依赖反而让它的优势无从发挥
  • 首次运行建议加 --python-platform manylinux2014(或对应平台):避免 uv 对每个包反复探测本地 ABI 兼容性,这是隐藏耗时大户
  • 确保 UV_CACHE_DIR 指向一个高速本地路径(比如 SSD 上的目录),不要留在 NFS 或容器 tmpfs 里

uv syncuv pip install -r requirements.txt 该选哪个?

uv sync。它专为 lockfile 场景设计,直接读 uv.lock 或兼容的 poetry.lock/pip-tools 输出,跳过所有依赖解析阶段,纯下载+安装,通常快 3–5 倍。

  • uv pip install -r 仍会触发完整解析,哪怕文件内容完全静态
  • uv sync 要求先有 lock 文件:没 uv.lock 就先跑 uv pip compile requirements.in -o uv.lock
  • 如果项目用 pyproject.toml + PEP 621(如 setuptools 64+),优先用 uv sync --python 3.11,它能自动识别依赖段并跳过无关元数据处理

windowsuv 安装失败报 Error: failed to download wheel 怎么办?

大概率是 TLS 配置或代理穿透问题。uv 默认用 rustls,不走系统证书库,也不读 http_PROXY 环境变量(除非显式传参)。

  • 临时解决:加 --trusted-host pypi.org --trusted-host files.pythonhosted.org
  • 企业环境必须走代理时,改用 https_proxy=http://your-proxy:8080 uv pip install ...(注意是小写 https_proxy,大写无效)
  • 某些杀毒软件会拦截 rustls 的 TLS 握手,可试 UV_HTTP_CLIENT=reqwest uv pip install ... 切回 reqwest 引擎(稍慢但兼容性强)

uv venv 创建虚拟环境后,pip list 为空,但 python -m pip list 有包

因为 uv 创建的 venv 默认禁用 ensurepip,且不预装 pipsetuptools——这是故意为之,为提速和最小化镜像体积。

立即学习Python免费学习笔记(深入)”;

  • 要立刻用 pip:创建时加 --seed,即 uv venv .venv --seed --python 3.12
  • 不加 --seed 也行,后续手动 uv pip install pip,比 python -m ensurepip 快得多
  • CI/CD 中若需纯净环境,反而推荐不 --seed:避免 pip 版本污染,统一由 uv 管控后续所有安装行为

真正卡住人的地方往往不在命令怎么写,而在 uv 把“默认不做事”做到了极致——它不会替你猜缓存位置、不会自动 fallback 到旧协议、也不会悄悄帮你补上缺失的 seed 包。所有省下的时间,都换成了需要明确声明的意图。

text=ZqhQzanResources