I used cargo install to globally install a package, such as rustfmt or racer.
How can I update the installed package without first deleting it (cargo uninstall) and then running cargo install again.
Is there an update command?
There is no such command in vanilla cargo (well, there's cargo install but that's for dependencies), but since cargo supports third-party subcommands there is an answer: the cargo-update crate.
Install as usual with
cargo install cargo-update then use
cargo install-update -a to update all installed packages, for more usage information and examples see the cargo install-update manpage.
Disclaimer: am author
cmake to be installedcargo install can now be used to install crates globally: Install a Rust binary. Default location is $HOME/.cargo/binAs of Rust 1.41.0, you can use the following command to update crates to their latest version:
cargo install <crate> This came from pull request #6798 (Add install-upgrade) and was stabilized in #7560 (Stabilize install-upgrade).
Instead of failing when cargo install detects a package is already installed, it will upgrade if the versions don't match, or do nothing (exit 0) if it is considered "up-to-date".
The following command will always uninstall, download and compile the latest version of the crate - even if there's no newer version available. Under normal circumstances the install-upgrade feature should be preferred as it does save time and bandwidth if there's no new version of the crate.
cargo install --force <crate> Further information can be found in the GitHub issue rust-lang/cargo#6797 and in the official documentation chapter.
-Z install-upgrade argument. github.com/rust-lang/cargo/pull/7560cargo install --list | grep '^[a-zA-Z0-9_\-]* v[0-9.]*:$' | cut -d ' ' -f1 | xargs cargo install would sufficewasm-pack 0.10.0 installed, but when I tried to update it to 0.10.1 using cargo install wasm-pack I got an error: error: binary 'wasm-pack' already exists in destination and had to use --force.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' ') Explanation:
cargo install with the resulting package namescargo install $(cargo install --list | awk '/:$/ { print $1; }')cargo install --list | egrep -o '^[^ ]+' is a bit shorter for listing the installed packages. Are there ever non-indented lines that are not packages?cargo-upgrade-all in your PATH, and voila! you can run cargo upgrade-all including automatic autocomplete ;-). Thanks, cargo!Rust compiles each package from source when you update it, which can take some time. If you want prebuilt binaries (faster updates) to be used when possible, use cargo‑binstall
To set it up and update all your installed Rust binaries:
cargo install cargo-binstall cargo install cargo-update cargo-install-update install-update --all If cargo-binstall is present, cargo-update will automatically use it to install updates faster whenever prebuilt binaries are available.
As a side note, you can also install packages using cargo-binstall. It first looks up the package on crates.io and tries to find a ready-made version in the project’s repository. If that doesn’t work, it checks a third-party host called Quickinstall, and as a last resort, it just uses cargo install to build the package from source.
Warning: The Quickinstall host is a third-party service. Use it at your own discretion.
cargo install thingwill cause it to be updated.