4

我试图安装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 yanked 版本 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在 rust 世界中是什么意思?

4

1 回答 1

2

这意味着包裹已被标记为“yanked”。这通常是在 has package 的作者有一个非常令人信服的理由,即根本不应该使用某个版本的包,并且非常强烈地建议不应该使用该包时这样做。您可以忽略 yanks--force以强制使用 yanked 包,但这通常是一个坏主意:通常 yank 包是有充分理由的。

在您的情况下:cachediryanked 0.1.X 版本是一个完全不同的包,其作者与较新版本不同。旧版本未维护且无法更新(因为cachedir现在有一个不同的所有者发布了不同的包),因此新的所有者cachedir猛拉了旧版本。smallvec1.4.0 有一个错误,它在与零大小类型一起使用时会导致未定义行为,并且 UB 已经够糟糕了,以至于您实际上不太可能想要使用该版本。对此的修复是更新到smallvec没有该错误的更高版本。

于 2021-07-24T13:31:17.183 回答