Cargo 目录源里的无依赖工具安装失败:先核对安装入口
目录源替换 crates.io 后,无依赖二进制包在 Cargo 1.96.0、1.97.1 安装失败,同一包在 1.95.0 可安装。区分目录源安装回归与锁文件、校验文件问题。
把 crates.io 替换为本地 directory source 后,cargo install 能选中工具包,却无法完成安装;同一包加入一个依赖后反而能安装。若这发生在无依赖二进制包上,先保留 Cargo 版本与来源配置,检查目录源的安装分支。
这条具体回归的对比范围是:相同目录源与包,Cargo 1.95.0 可以安装,1.96.0 失败,1.97.1 也出现过相同现象。它不能解释所有离线安装失败,也不能据此认定每个后续 Cargo 版本都受影响。
先确认真的是 directory source
配置形状类似下面这样,路径仅作示例:
[source.crates-io]
replace-with = "local"
[source.local]
directory = "/approved/cargo-vendor"
目录源保存的是解包后的包目录,每个包还带有 .cargo-checksum.json;它与保存 .crate 文件和索引的 local registry 不同。先核对安装包是否具有二进制目标、包名和版本是否正确、文件是否完整,不要为绕过校验而手工编造空校验清单。
普通 registry 安装从 CARGO_HOME/config.toml 开始发现配置,不能只看当前工程的 .cargo/config.toml。记录真实生效的替换关系,避免以为已切换来源,实际上仍使用用户级配置。
依赖有无会影响安装结果,提示应比较来源读取分支;具体初始化原因尚未完整确认。若包本身缺文件或来源配置错误,应先处理那些直接错误。
在隔离安装目录验证绕行
已有经批准、且满足该工具最低 Rust 版本的 1.95.0 工具链时,可以对同一包做受控对比。不要为了验证旧版随意改变整个工作区的默认工具链,更不要忽略工具自身的最低版本和安全维护要求。
手头已有经过审查的完整包目录时,也可评估路径安装入口:
cargo install --path /approved/tool-source --root ./tool-check
两个路径都是示例,应换成可信包目录及专门的安装输出目录。命令会构建并执行包的构建脚本,可能解析或下载依赖;它不是只读检查。路径安装还会从包目录发现本地配置,应重新核对来源和构建设置。
--path 改变的是待安装包的取得入口,不是修复整个目录源。如果工具还有通过目录源提供的叶子依赖,仍需检查那些依赖能否正常读取。不要为让初始化发生而给真实工具添加无用依赖。
另有锁文件错误时,可单独评估 --locked,但它只要求采用可用的包锁文件,不保证解决无依赖目录源分支。恢复标准是隔离目录里产生预期工具、版本和内容正确,并能通过工具原有的功能检查;随后再按项目流程安装到日常工具目录。


