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上采用以下策略:
- 检查并删除旧版本
- 将当前版本添加到当前可执行文件的扩展名中
- 在重命名的文件位置创建一个空文件(这样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:为前缀)都已实现。
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
示例工作流
- 首先安装几个常用工具:
cargo install ripgrep fd-find exa
- 定期检查并更新所有工具:
cargo install-update -a
- 查看哪些工具需要更新:
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安装的二进制工具,保持它们始终是最新版本。