我试图使用ripgrep_all安装cargo install ripgrep_all。它给出了以下错误:
% cargo install ripgrep_all
Updating crates.io index
Installing ripgrep_all v0.9.6
error: failed to compile `ripgrep_all v0.9.6`, intermediate artifacts can be found at `/tmp/cargo-install5HlOMt`
Caused by:
failed to select a version for the requirement `cachedir = "^0.1.1"`
candidate versions found which didn't match: 0.3.0, 0.2.0
location searched: crates.io index
required by package `ripgrep_all v0.9.6`然后我搜索了一下找到
它看起来像是cachedir拉出的0.1.1版本。
解决办法是:
cargo install --locked ripgrep_all 我成功地安装了它。然而,在安装过程中,它说:
% cargo install --force --locked ripgrep_all
Updating crates.io index
Installing ripgrep_all v0.9.6
warning: package `cachedir v0.1.1` in Cargo.lock is yanked in registry `crates.io`, consider running without --locked
warning: package `smallvec v1.4.0` in Cargo.lock is yanked in registry `crates.io`, consider running without --locked这让我好奇。Yank在生锈世界是什么意思?
发布于 2021-07-24 13:31:17
这意味着包已被标记为“拉”。这通常是在have软件包的作者有一个非常令人信服的理由,即一个包的某个版本根本不应该被使用,并且非常强烈地建议不应该使用这个包的时候。您可以忽略使用--force的yanks来强制使用按下的包,但这通常是个坏主意:包通常是出于一个很好的理由才被拉出的。
在您的例子中:按下的cachedir 0.1.X版本是一个完全不同的包,与新版本的作者完全不同。旧版本没有维护,无法更新(因为cachedir现在有了不同的所有者来发布不同的包),所以cachedir的新所有者拉出了旧版本。smallvec 1.4.0有一个错误,当它与零大小的类型一起使用时,它会导致未定义的行为,并且UB非常糟糕,以至于您实际上不太可能使用该版本。解决这个问题的方法是更新到不存在该bug的smallvec的更高版本。
https://stackoverflow.com/questions/68509895
复制相似问题