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
?
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 add
和
cargo rm
,最终直接在 Cargo 中实现。这最终也可能是内置的,但相关问题表明其最终如何工作存在不确定性。