Rust包管理工具cargo-update的使用:轻松更新和管理Cargo安装的二进制工具链

Rust包管理工具cargo-update的使用:轻松更新和管理Cargo安装的二进制工具链

简介

cargo-update是一个Cargo子命令,用于检查和更新已安装的可执行文件。

安装

首先确保已安装CMake和所需的依赖库。

然后执行常规安装命令:

cargo install cargo-update

如果安装失败,可以尝试以下方法:

  • 使用PKG_CONFIG_PATH=/usr/local/opt/openssl/lib/pkgconfig重新尝试
  • 使用LIBSSH2_SYS_USE_PKG_CONFIG=whatever重新尝试
  • 通过brew安装OpenSSL,并使用LDFLAGS="-L/usr/local/opt/openssl@1.1/lib" CPPFLAGS="-I/usr/local/opt/openssl@1.1/include"重新尝试
  • 确保没有通过brew重复安装openssl
  • 使用--features vendored-openssl重新尝试
  • 使用--features vendored-libgit2重新尝试
  • 使用--features vendored-libcurl重新尝试

依赖

依赖 Debian包 Fedora包 MSYS2包
libgit2 libgit2-dev libgit2-devel mingw-w64-x86_64-libgit2
libcurl libcurl4-*-dev libcurl-devel libcurl-devel
libssh2 libssh-dev libssh2-devel mingw-w64-x86_64-libssh2
openssl libssl-dev openssl-devel mingw-w64-x86_64-openssl
pkgconf (某些平台) pkgconf pkgconf mingw-w64-x86_64-pkgconf
libsecret (非Apple UNIX; 可选) libsecret-1-0 libsecret

使用

cargo install-update -a — 检查新版本并更新所有已安装的包。

cargo install-update crate1 crate2 ... — 检查新版本并更新选定的包,不会安装新包。

cargo install-update-config -t unstable -f feature1 -d false crate — 当构建crate时,使用unstable工具链,启用feature1并禁用默认特性。

自更新

cargo-update在Linux和Windows上可以无缝更新自身。

在Windows上采用以下策略:

  1. 检查并删除旧版本
  2. 将当前版本添加到当前可执行文件的扩展名中
  3. 在重命名的文件位置创建一个空文件(这样cargo install会"替换"它而不会在.crates.toml中重复条目)

示例代码

// 更新所有已安装的包
cargo install-update -a

// 更新特定包
cargo install-update rustfmt clippy

// 配置构建选项
cargo install-update-config -t nightly -f serde -d false serde_json

常见问题

一些crate(如clippy和rustfmt)已从Crates.io迁移为rustup组件。如果您之前安装过它们,然后又通过rustup component添加,它们可能没有从cargo install安装的crate列表中删除,您可能会遇到错误。

在这种情况下,运行cargo install --list验证它们是否仍然存在,并使用cargo uninstall卸载它们,这将注销cargo版本并保留rustup版本。

源替换与自定义注册表

Cargo允许一次替换整个注册表。例如,在~/.cargo/config中添加以下内容将用上海交通大学的镜像替换默认的crates.io注册表:

[source.crates-io]
replace-with = "sjtu"

[source.sjtu]
registry = "https://mirrors.sjtug.sjtu.edu.cn/git/crates.io-index"

cargo-update会解析到最深的注册表,并将–registry sjtu传递给cargo install。这需要添加以下额外配置:

[registries.sjtu]
index = "https://mirrors.sjtug.sjtu.edu.cn/git/crates.io-index"

注册表认证

截至Cargo 1.85.1,所有提供程序(默认的cargo:token-but-it-doesn’t-read-the-environment、cargo:token、cargo:token-from-stdout、cargo:wincred(Win32)、cargo:macos-keychain(Apple)、cargo:libsecret(非Apple UNIX)、提供程序协议(不以cargo:为前缀)都已实现。


1 回复

Rust包管理工具cargo-update的使用:轻松更新和管理Cargo安装的二进制工具链

cargo-update 是一个实用的Rust工具,用于管理和更新通过Cargo安装的二进制crate(工具链)。它提供了比标准cargo install更强大的功能,特别适合维护全局安装的Rust工具。

安装

首先安装cargo-update本身:

cargo install cargo-update

主要功能

1. 检查可更新工具

cargo install-update -l

这会列出所有已安装的可更新工具及其当前和最新版本。

2. 更新所有工具

cargo install-update -a

这会更新所有已安装的工具到最新版本。

3. 更新特定工具

cargo install-update <package-name>

例如更新ripgrep

cargo install-update ripgrep

4. 仅检查更新(不实际安装)

cargo install-update -g

5. 安装新工具并启用自动更新

cargo install <package> --features install-update

配置选项

可以在~/.cargo/.crates.toml中配置默认行为:

[install-update]
# 更新时是否显示进度条
progress = true
# 是否包含预发布版本
precise = false
# 更新时是否强制重新安装
force = false

示例工作流

  1. 首先安装几个常用工具:
cargo install ripgrep fd-find exa
  1. 定期检查并更新所有工具:
cargo install-update -a
  1. 查看哪些工具需要更新:
cargo install-update -l

注意事项

  • 需要Rust 1.41或更高版本
  • 对于通过其他方式安装的工具(如系统包管理器)无效
  • 更新时可能需要重新编译,这可能需要一些时间

cargo-update是维护Rust工具链生态系统的实用工具,特别适合那些经常使用多个Rust二进制工具的开发人员。

完整示例demo

# 1. 安装cargo-update
cargo install cargo-update

# 2. 安装一些常用的Rust工具
cargo install ripgrep fd-find exa bat

# 3. 检查哪些工具可以更新
cargo install-update -l
# 示例输出:
# Package  Installed  Latest   Needs update
# ripgrep  13.0.0     14.0.0   Yes
# fd-find  8.7.0      9.0.0    Yes
# exa      0.10.1     0.11.0   Yes
# bat      0.22.1     0.23.0   Yes

# 4. 更新所有工具
cargo install-update -a
# 这将更新所有列出的工具到最新版本

# 5. 仅更新特定工具(如只更新ripgrep)
cargo install-update ripgrep

# 6. 配置自动更新选项
echo '[install-update]
progress = true
precise = false
force = false' > ~/.cargo/.crates.toml

# 7. 安装新工具时启用自动更新功能
cargo install dust --features install-update

# 8. 定期检查更新(不实际安装)
cargo install-update -g

这个完整的示例演示了从安装cargo-update到日常使用的工作流程。通过这个工具,你可以轻松管理所有通过cargo安装的二进制工具,保持它们始终是最新版本。

回到顶部