目录
一、最常用的升级方法
如果 Rust 是通过官方推荐的 rustup 安装的,直接执行:
rustup update stable
这条命令会同时升级:
- Rust 编译器
rustc - 包管理和构建工具
cargo - Rust 标准库
rustfmt、文档等已安装组件
因此,通常不需要分别升级 Cargo 和 Rust。Cargo 属于 Rust 工具链的一部分,会跟随对应工具链一起升级。(Rust语言)
二、查看当前版本
升级前可以先查看版本:
rustc --version cargo --version rustup --version
例如:
rustc 1.xx.x cargo 1.xx.x rustup 1.xx.x
查看当前正在使用哪个 Rust 工具链:
rustup show
三、执行升级
1. 只升级稳定版
日常开发推荐使用:
rustup update stable
升级完成后,再次确认:
rustc --version cargo --version
2. 升级所有已安装的工具链
如果同时安装了 stable、beta、nightly,可以执行:
rustup update
它会检查并升级当前安装的所有官方工具链。(Rust语言)
例如可能包括:
stable-x86_64-pc-windows-msvc nightly-x86_64-pc-windows-msvc
3. 只升级 rustup 自身
rustup self update
这条命令只升级 rustup,不会单独下载新的 Rust 工具链。通常执行 rustup update 时也会顺便检查 rustup 自身更新。(Rust语言)
四、容易混淆的 cargo update
注意,下面这条命令:
cargo update
不是升级 Cargo 工具本身。
它的作用是更新当前 Rust 项目中的依赖版本,并修改:
Cargo.lock
例如:
cd my-rust-project cargo update
表示在 Cargo.toml 允许的版本范围内,更新项目依赖。(Rust 文档)
两者区别如下:
| 命令 | 作用 |
|---|---|
rustup update stable |
升级 Rust 和 Cargo 工具链 |
rustup update |
升级所有已经安装的 Rust 工具链 |
rustup self update |
只升级 rustup |
cargo update |
更新项目的 Cargo 依赖和 Cargo.lock |
五、升级后版本没有变化
如果执行了:
rustup update stable
但进入某个项目后,rustc --version 仍然是旧版本,可以执行:
rustup show
检查项目是否指定了固定工具链。
情况一:项目存在 rust-toolchain.toml
例如:
[toolchain] channel = "1.85.0"
这表示项目被固定在 Rust 1.85.0。即使全局 stable 已升级,进入这个项目时仍然使用 1.85.0。
可以修改成:
[toolchain] channel = "stable"
或者指定新的版本:
[toolchain] channel = "1.96.1"
项目目录中的 rust-toolchain.toml、目录 override 等配置,会优先于全局默认工具链。(Rust语言)
情况二:目录设置了 override
查看:
rustup show
取消当前目录的固定工具链:
rustup override unset
然后重新执行:
rustup update stable
六、Windows 升级示例
在 PowerShell、CMD 或 VS Code 终端中执行:
rustc --version cargo --version rustup update stable rustc --version cargo --version
如果出现类似错误:
could not remove rustup.exe 文件正在被另一个程序使用 Access is denied
先关闭:
- VS Code
- RustRover
- 正在运行的 Cargo 程序
- 其他 PowerShell、CMD 终端
然后重新打开终端执行:
rustup update stable
官方 rustup 文档也指出,编辑器中运行的 Rust 相关服务可能导致 Windows 无法替换 rustup.exe。(Rust语言)
七、推荐的完整升级命令
平时只需要执行:
rustup update stable rustc --version cargo --version
需要同步更新项目依赖时,再进入项目目录执行:
cargo update cargo check
其中:
rustup update stable
升级开发工具;而:
cargo update
更新当前项目的第三方依赖。