我有一个依赖于
pyo3
的简单项目。目前/之前,它使用的是0.20.0版本,但最近新推出了0.21.2版本。我正在寻找一个Cargo命令来更新依赖项,即使这意味着我必须回头查看源代码并修复引入的任何破坏性变更。然而,如果我运行:
> cargo update pyo3 --precise 0.21.2
或者同样地:
cargo update pyo3
然后我会收到以下错误:
错误:未能为需求 `pyo3 = "^0.20.0"` 选择一个版本
找到的候选版本不匹配:0.21.2
搜索位置:crates.io索引
由包 `eight-ball v0.1.0 (/home/harry/Documents/eight-ball)` 需要
可能一个crate被更新了,但忘记重新vendor了?
这是我在更新之前Cargo.toml
文件的样子:
[package]
name = "eight-ball"
version = "0.1.0"
edition = "2021"
# 更多键和它们的定义在 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添加一个
upgrade
命令。你可以使用它来:检查更新的不兼容版本:
将依赖项更新到最新的不兼容版本:
将依赖项更新到特定的不兼容版本:
背景信息,cargo-edit之前有
cargo add
和cargo rm
,这些最终在Cargo中直接实现。这个也可能最终被内置,但相关问题表明对于最终如何实现还存在不确定性。