为什么货物安装需要“--locked”才能工作?

cal*_*vin 3 rust rust-cargo

我试图强行安装cargo-sort

cargo install --force cargo-sort
Run Code Online (Sandbox Code Playgroud)

然而,它抱怨

error: failed to compile `cargo-sort v1.0.9`, intermediate artifacts can be found at `/var/folders/2q/sfkj3vg13z175flb8j9znf9w0000gn/T/cargo-installJcyWnG`

Caused by:
  package `clap_builder v4.4.0` cannot be built because it requires rustc 1.70.0 or newer, while the currently active rustc version is 1.67.0-nightly
  Try re-running cargo install with `--locked
Run Code Online (Sandbox Code Playgroud)

我的 Rust 工具链是

nightly-2022-11-15-x86_64-apple-darwin (override)
Run Code Online (Sandbox Code Playgroud)

因为它建议我使用--locked. 所以我用

cargo install --force --locked cargo-sort
Run Code Online (Sandbox Code Playgroud)

有效。

我的 Cargo.lock 是https://github.com/pingcap/tidb-engine-ext/blob/raftstore-proxy/Cargo.lock

从 rust 的文档中,我知道--locked意味着使用 Cargo.lock 中所需的版本。clap_builder但是,我发现我的 Cargo.lock 中没有任何条目。

我的问题是为什么--locked可以工作?我认为 Cargo.lock 没有做出任何贡献。

Kev*_*eid 6

\n

从 rust 的文档--locked中,我知道意味着使用Cargo.lock. 但是,我发现我的 .txt 文件中没有关于 clap_builder 的条目Cargo.lock

\n
\n

在 的情况下cargo install,使用的锁定文件是您正在安装的软件包( cargo-sort) 中的文件。cargo install根本不与当前目录中的包交互,除非您要求它安装该包。

\n

您可以使用 docs.rs 查看版本的锁定文件cargo-sort1.0.9,它没有相应的条目clap_builder,但这是因为clap该文件中的旧版本根本不使用clap_builder

\n
\n

话虽如此,您可能应该更新 Rust 工具链,并stable使用nightly; 那么你就不需要了,--locked因为你将能够构建最新的包clap和其他包。除非需要,否则使用夜间编译器构建任何东西都是不明智的, \xe2\x80\x94 nightlies 可能有严重的错误。

\n

如果你想继续使用 nightly 进行开发,你可以通过询问来安装 stable:

\n
cargo +stable install cargo-sort\n
Run Code Online (Sandbox Code Playgroud)\n