货物安装是否有相应的更新命令?

我想更新一个使用 cargo install在全局范围内安装包的包,比如 rustfmt 或 racer。如果不首先删除已安装的软件包(通过 cargo uninstall) ,然后再次运行 install 命令,我就无法找到更新它的方法。有更新命令吗?

31864 次浏览

在普通的 cargo中没有这样的命令(好吧,有 cargo install,但那是用于依赖关系的) ,但是因为 cargo支持 第三方子命令,所以有一个答案: cargo-update板条箱

像往常一样使用 cargo install cargo-update安装,然后使用 cargo install-update -a更新所有已安装的软件包,有关更多使用信息和示例,请参见 cargo install-update手册

免责声明: 我是作者

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

As of Rust 1.41.0, you can use the following command to update crates to their latest version:

cargo install <crate>

这来自拉请求 # 6798(添加安装-升级)和稳定在 # 7560(稳定安装-升级)

它是怎么工作的?

如果 cargo install检测到软件包已经安装,它不会失败,如果版本不匹配,它会升级; 如果它被认为是“最新版本”,则什么也不做(退出0)。

Forcing an upgrade / re-installation

下面的命令将 一直都是卸载,下载和编译的最新版本的板条箱-即使没有更新的版本可用。在正常情况下,install-upgrade的功能应该是首选的,因为它确实节省时间和带宽,如果没有新版本的板条箱。

cargo install --force <crate>

文件

更多信息可以在 GitHub 问题 Rust-Lang/货物编号6797在官方文件一章中找到。

Here is a one-liner to update all installed Cargo crates, except those installed from a local folder:

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

说明:

  • 列出已安装的软件包
  • 筛选包含包名称和版本的行,并排除包含文件系统路径的行
  • 删除这些行,只包含包的名称
  • cargo install with the resulting package names