Cargo install update:如何在Rust中更新二进制crate

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

“cargo install”存在,但“cargo update”却没有?每个Rust开发者都熟悉的痛点

\n\n

你刚刚运行了cargo install ripgrep来获取最新的rg二进制文件。一周过去了。你听说新版本发布了——14.1.0替代了13.0.0。这时一个合理的问题出现了:“Does cargo install have an equivalent update command?”

\n\n

这个问题在Stack Overflow上获得了数千次浏览。这并非没有道理。原因在于,cargo中没有内置的cargo install update命令。不,你没看错。确实没有。但这并不意味着你只能手动下载新版本。有几种方法,我们将逐一介绍——从简单到优雅。

\n\n

在本文中,我们不仅仅是翻译Stack Overflow上的答案。我们将比较各种方法,展示实际代码,并提供可操作的建议。开始吧!

\n\n

为什么Cargo没有用于已安装crate的“update”命令?

\n\n

在急于寻找错误之前,让我们先理解其理念。cargo install旨在安装二进制crate(那些在Cargo.toml中有[[bin]]部分的crate)。它不像apt或npm那样的包管理器。Cargo首先是项目的构建器和依赖管理器,而不是全局软件安装程序。

\n\n

cargo update命令确实存在,但它在项目内部工作——更新Cargo.lock中的依赖项。对于全局安装的二进制文件,需要其他解决方案。

\n\n

方法#1:经典重装(cargo install --force)

\n\n

最简单直接的方法是使用--force标志重新安装crate:

\n\n
# 第一次安装\ncargo install ripgrep\n\n# 一周后——更新\ncargo install --force ripgrep\n
\n\n

底层发生了什么?Cargo从crates.io下载最新版本的crate,重新编译并替换二进制文件。--force标志强制覆盖现有文件,即使版本相同。

\n\n

优点:

\n
    \n
  • 无需安装额外工具
  • \n
  • 始终有效,随处可用
  • \n
  • 直观易懂
  • \n
\n\n

缺点:

\n
    \n
  • 每次完全重新编译(如果crate很大,会很慢)
  • \n
  • 不检查是否有新版本——你只是重新安装
  • \n
  • 如果你安装了10个以上的crate,会很不方便
  • \n
\n\n

这就像为了更新驱动程序而重装Windows。有效吗?是的。最优吗?不是。

\n\n

方法#2:cargo-outdated——智能的过时crate检测器

\n\n

如果你想确切知道是否需要更新,请安装cargo-outdated:

\n\n
cargo install cargo-outdated\n
\n\n

现在检查哪些crate已过时:

\n\n
cargo outdated --root ~/.cargo\n
\n\n

输出将显示类似以下内容:

\n\n
Package    Current  Latest  Deps\nripgrep    13.0.0   14.1.0  -\nbat        0.22.1   0.23.0  -\n
\n\n

然后你可以通过cargo install --force更新特定的crate。但这仍然是两步操作。想要自动化?请继续阅读。

\n\n

优点:

\n
    \n
  • 仅显示确实过时的crate
  • \n
  • 也适用于项目的依赖项
  • \n
  • 有过滤选项
  • \n
\n\n

缺点:

\n
    \n
  • 不自行更新——仅提供信息
  • \n
  • 需要单独安装
  • \n
\n\n

方法#3:cargo-update(是的,确实有这样一个crate!)

\n\n

对问题“Does cargo install have an equivalent update command?”最优雅的回答是——

博客

书籍推荐