uv tree 基于 uv.lock 静态展开依赖树,默认显示一级直接依赖及子依赖,不包含可选依赖;需用 --extra 或 --environment 显式指定 extras 或环境分组,且依赖版本为锁文件中解析出的实际版本。

uv tree 查看依赖树的基本用法
直接运行 uv tree 就能生成当前项目的依赖树,前提是项目根目录下存在 pyproject.toml 或 requirements.txt,且已通过 uv lock 或 uv sync 生成过锁文件(uv.lock)。它不会临时解析源码或动态安装,而是基于锁文件做静态展开。
- 默认只显示一级直接依赖及其子依赖,不展开可选依赖(
extra) - 如果提示
No lockfile found,先执行uv lock - 依赖版本显示为锁文件中实际解析出的版本,不是
pyproject.toml中写的模糊范围(如requests>=2.28)
如何显示可选依赖(extras)和不同环境下的依赖
uv tree 默认忽略 [project.optional-dependencies] 和 [tool.uv.environments] 中定义的环境分组。要查看带 extra 的依赖树,必须显式指定:
- 查看含
devextra 的依赖:运行uv tree --extra dev - 查看特定环境(如
test):需配合--environment,例如uv tree --environment test - 同时启用多个 extra:用逗号分隔,如
uv tree --extra dev,docs - 注意:extra 名称区分大小写,且必须已在
pyproject.toml中正确定义
常见错误:为什么 uv tree 没有输出或报错
最常遇到的是静默无输出或报 No pyproject.toml or requirements.txt found,本质是 uv 找不到项目元数据入口:
- 当前目录不是项目根目录 —— 检查是否存在
pyproject.toml,或用uv tree --config-file /path/to/pyproject.toml指定路径 - 锁文件损坏或格式异常 —— 删除
uv.lock后重试uv lock && uv tree - 使用了 PEP 621 以外的构建后端(如 setup.py)——
uv tree目前不支持直接解析setup.py,需先转成pyproject.toml - Python 版本不匹配 —— 如果
requires-python = ">=3.11"但当前解释器是 3.10,uv tree会跳过该环境,建议用uv python list确认可用版本
性能与过滤技巧:快速定位问题依赖
uv tree 解析速度很快,但大型项目仍可能输出几百行。实用过滤方式如下:
立即学习“Python免费学习笔记(深入)”;
- 只看某个包的依赖链:
uv tree | grep -A 5 -B 5 "click"(Linux/macOS)或uv tree | findstr /C:"click"(Windows) - 排除间接依赖,只看直接依赖:
uv tree --depth 1 - 高亮冲突提示(如重复包、版本不兼容):
uv tree --conflicts(需 uv ≥ 0.4.0) - 导出为 JSON 方便程序处理:
uv tree --format json,注意该输出包含完整解析上下文,体积较大
真正容易被忽略的是:依赖树反映的是锁文件状态,不是当前 site-packages 实际安装内容。如果手动 pip install 过其他包,uv tree 不会体现 —— 它只忠于 uv.lock。


















