如何查询当前所在Rust crate的版本号?
可靠获取Crate版本号的方法
直接使用Cargo官方CLI命令是最稳定的方案,完全无需手动解析Cargo.toml,这些命令由官方长期维护,不会轻易失效:
获取当前项目的版本号
在项目根目录下执行:
cargo pkgid | cut -d# -f2
输出会是1.2.3这类纯版本号。如果你的Cargo版本在1.59及以上,也可以用cargo metadata配合jq精准提取(适合复杂工作区场景):
cargo metadata --format-version 1 | jq -r '.packages[] | select(.name == "你的_crate名称") | .version'
要是不想依赖jq,用awk处理pkgid的输出也可行:
cargo pkgid | awk -F '#' '{print $2}'
获取依赖Crate的版本号
如果要查询某个依赖的版本,比如serde,可以用:
cargo metadata --format-version 1 | jq -r '.packages[] | select(.name == "serde") | .version'
或者用cargo tree快速过滤:
cargo tree -p serde --depth 0 | awk '{print $2}'
不推荐用grep解析Cargo.toml的原因
手动用grep查找version字段很容易踩坑:
- 工作区项目中可能存在多个
version字段(子crate、依赖声明里都可能出现) - 版本号可能被注释掉,grep会误抓取
- Cargo.toml允许版本号使用多行写法,grep无法正确识别
而Cargo的官方命令会正确处理所有合法的配置格式,兼容性和稳定性都有保障,完全不用自己处理这些边缘情况。
内容的提问来源于stack exchange,提问作者SwimBikeRun
相关产品推荐
相关产品推荐

