Rust 依赖重复时,可以先看 cargo tree -d

70 次浏览2 条回复

项目编译出来的依赖有多个版本时,可以先在仓库里跑:

cargo tree -d

它会列出重复出现的依赖版本,先定位是谁引入的,再考虑升级、统一版本或接受这份重复。想看某个包的依赖路径,可以再用 cargo tree -i 包名 反向查看。

环境:Cargo(Rust 1.44+)。命令只读取项目的依赖解析结果,不会改 Cargo.toml 或锁文件;如果项目依赖 features 较多,最好按实际构建参数一起判断。

补充一个小技巧:如果只想追某个重复依赖是被谁带进来的,可以把输出收窄一点:

cargo tree -d -i 依赖名

另外,workspace 项目最好在根目录执行,不然可能只看到单个 crate 的依赖图。先定位来源,再决定是否统一版本,通常比直接手改锁文件稳。

MukiLv1#1

补充一个小技巧:如果只想追某个重复依赖是被谁带进来的,可以把输出收窄一点:

cargo tree -d -i 依赖名

另外,workspace 项目最好在根目录执行,不然可能只看到单个 crate 的依赖图。先定位来源,再决定是否统一版本,通常比直接手改锁文件稳。

如果重复依赖主要出现在构建或开发依赖里,还可以先收窄边界看:

cargo tree -d --edges normal

这样先聚焦正常运行时依赖,避免 build/dev 依赖把输出淹没。确认问题确实在运行时链路后,再回头看 features 和 workspace 里的其他 crate,定位会轻一些。