能,uv install -r requirements.txt 可直接读取且极快;默认不解析-r/-c嵌套引用,需--recursive显式启用,-c约束文件当前不支持。

uv 完全兼容现有的 requirements.txt,但默认行为不自动解析嵌套的 -r 或 -c 引用,需显式启用。
uv install 能直接读 requirements.txt 吗
能,且速度极快。uv 将 requirements.txt 视为标准输入源,无需转换格式:
uv install -r requirements.txt
注意:uv install 默认只处理顶层文件,遇到 -r constraints.txt 或 -c constraints.txt 这类行时会跳过——它不会自动递归加载,除非加 --recursive 标志:
- 不加
--recursive:只解析requirements.txt本体,忽略所有-r/-c - 加
--recursive:按顺序展开所有-r引用(但不支持循环引用,会报错RecursionError) -
-c constraints.txt始终被忽略,uv 目前(v0.4.21)不支持约束文件语义,需手动合并或改用pyproject.toml
pip 和 uv 解析同一份 requirements.txt 结果一致吗
绝大多数情况下一致,但有三个关键差异点:
- 版本运算符处理更严格:uv 拒绝
pkg~=1.2.3.4这种非法 PEP 440 版本(pip 会容忍),报错Invalid version specifier - URL 依赖默认禁用:含
git+、https://的行默认被跳过,需加--universal或--python-platform显式允许 - 环境标记(
platform_system == "Linux")支持完整,但 uv 的求值器不支持旧式extra == "dev"语法(应改用extra == "dev"的标准形式,实际多数没问题)
要不要把 requirements.txt 全换成 pyproject.toml
不必强换,但值得评估:
- 纯依赖声明场景(如 CI 构建、简单服务):留
requirements.txt+uv install -r即可,迁移零成本 - 需要约束、可选依赖、构建后端或跨平台控制时:
pyproject.toml是唯一可靠选择,uv 对其原生支持更好(例如[project.optional-dependencies]可直接uv install "myproj[dev]") - 混合使用常见坑:若
pyproject.toml中定义了[build-system],uv 仍会优先走 PEP 517 构建流程,此时requirements.txt仅用于uv pip install场景,二者职责分离
真正容易被忽略的是约束文件(-c)和 URL 依赖的静默失效——它们不会报错,只是不装,得靠 uv pip compile 配合 --emit-index-url 等标志做验证,否则上线才发现缺包。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!











