货物安装是否具有等效的更新命令?

w.b*_*ian 57 rust rust-cargo

我想更新我用于cargo install全局安装软件包的软件包,例如rustfmt或racer.我没有找到更新已安装软件包的方法,而不先删除它(通过cargo uninstall),然后再次运行install命令.有更新命令吗?

наб*_*эли 78

在vanilla中没有这样的命令cargo(好吧,cargo install但那是依赖关系),但是由于cargo支持第三方子命令,所以有一个答案:cargo-updatecrate.

像往常一样安装cargo install cargo-update,然后使用cargo install-update -a更新所有已安装的软件包,有关更多用法信息和示例,请参阅cargo install-update联机帮助页.

免责声明:我是作者

  • 非常感谢您使用此实用程序!这是梦幻般的!这应该是公认的答案 (3认同)
  • @rofrol 正如[手册页的安装部分](https://github.com/nabijaczleweli/cargo-update#installation)中明确指出的那样 (2认同)
  • “好吧,有货物安装,但那是为了依赖项”实际上“货物安装”现在可以用于全局安装板条箱:“安装 Rust 二进制文件”。默认位置是 $HOME/.cargo/bin` (2认同)
  • @MichaelMantion 说实话,在当今安全漏洞比比皆是的时代,有人决定添加一种在您的 PATH 上安装二进制文件的方法,但没有想到提供一种更新它们的方法,这太疯狂了。 (2认同)

w.b*_*ian 28

我发现的解决方案是将--force标志添加到install命令.例如cargo install --force clippy.这将有效地重新安装最新版本.

  • 在最新版本的“cargo”中,不再需要使用“--force”来更新箱子 (4认同)

Vla*_*eev 9

不.您可以在讨论这个问题.


Nic*_*ich 8

从Cargo 1.36.0开始,您现在可以在每晚工具链上使用以下命令,而不是使用cargo-update板条箱将板条箱更新为最新版本:

rustup install nightly
cargo +nightly install -Z install-upgrade <crate>
Run Code Online (Sandbox Code Playgroud)

这来自请求请求#6798(添加安装升级)

它是如何工作的?

如果不会cargo install检测到已安装的软件包,它会升级而不是失败,如果版本不匹配,它将升级,或者如果它被认为是“最新”,则不执行任何操作(退出0)。

强制升级/重新安装

以下命令将始终卸载,下载和编译最新版本的板条箱-即使没有可用的较新版本。通常情况下,install-upgrade应该首选该功能,因为如果没有新版本的包装箱,它可以节省时间和带宽。

cargo install --force <crate>
Run Code Online (Sandbox Code Playgroud)

文献资料

可以在GitHub问题rust-lang / cargo#6797和官方文档章节不稳定功能-> install-upgrade中找到更多信息


Dav*_*ley 5

这是一个单行更新所有已安装的 Cargo 板条箱,除了从本地文件夹安装的那些:

cargo install $(cargo install --list | egrep '^[a-z0-9_-]+ v[0-9.]+:$' | cut -f1 -d' ')
Run Code Online (Sandbox Code Playgroud)

解释:

  • 列出已安装的软件包
  • 过滤到包含包名称和版本的行,并排除具有文件系统路径的行
  • 剪切这些行以仅包含包名称
  • cargo install 带有结果包名称

  • `cargo install $(cargo install --list | awk '/:$/ { print $1; }')` (3认同)