如何告诉 Cargo 更新项目当前版本之外的依赖项?

问题描述 投票:0回答:1

我有一个依赖于

pyo3
的简单项目。目前/之前,它使用的是 0.20.0 版本,但最近发布了新版本,即 0.21.2 版本。我正在寻找一个可以更新依赖项的 Cargo 命令,即使这意味着我必须返回源代码并修复引入的任何重大更改。但是,如果我跑步:

> cargo update pyo3 --precise 0.21.2

或者同样:

cargo update pyo3

然后我遇到了以下错误:

error: failed to select a version for the requirement `pyo3 = "^0.20.0"`
candidate versions found which didn't match: 0.21.2
location searched: crates.io index
required by package `eight-ball v0.1.0 (/home/harry/Documents/eight-ball)`
perhaps a crate was updated and forgotten to be re-vendored?

这是

Cargo.toml
更新之前的文件:

[package] name = "eight-ball" version = "0.1.0" edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [lib] name = "eight_ball" crate-type = ["cdylib"] [dependencies] itertools = "0.12.1" pyo3 = "0.20.0"
如果我转到 

Cargo.toml

 文件并手动将 
pyo3
 上的版本更改为最新版本,然后构建,则一切正常。看起来我正在寻找的东西并不疯狂,所以我觉得我只是错误地使用了 Cargo。

我想要的是能够运行 Cargo 命令来将我更新到版本 0.21.2,但明显的选择不起作用,而且我看不到 --force 选项或类似选项。我不知道为什么它认为我如此坚定地保留在 0.20.0 版本。

如何使用 Cargo 来更新项目上的依赖项,而无需直接修改

Cargo.toml

rust rust-cargo
1个回答
0
投票
您可以安装

cargo-edit

cargo install cargo-edit
这将为 Cargo 添加一个 

upgrade

 命令。您可以用它来:

  • 检查较新的不兼容版本:

    > cargo upgrade -i --dry-run Checking mycrate's dependencies name old req compatible latest new req ==== ======= ========== ====== ======= pyo3 0.20.3 0.20.3 0.21.2 0.21.2
    
    
  • 将依赖项更新到最新的不兼容版本:

    > cargo upgrade -i -p pyo3
    
    
  • 将依赖项更新为特定的不兼容版本:

    > cargo upgrade -i -p [email protected]
    
    
作为背景,cargo-edit 之前有

cargo add

cargo rm
,最终直接在 Cargo 中实现。这最终也可能是内置的,但
相关问题表明其最终如何工作存在不确定性。

© www.soinside.com 2019 - 2024. All rights reserved.