Есть ли у cargo install команда для обновления установленных утилит?
Прямого эквивалента `cargo update` для `cargo install` нет, но есть отличные альтернативы
К сожалению, в Cargo действительно нет встроенной команды cargo update --installed или чего-то подобного. Разработчики Rust пока не добавили эту функциональность в ядро. Однако сообщество создало удобные решения, которые решают эту проблему гораздо элегантнее, чем ручное удаление/установка.
Вариант 1: Использование `cargo-install-update` (рекомендуемый способ)
Это самый популярный и стабильный плагин для Cargo. Он добавляет команду cargo install-update, которая умеет:
- Проверять версии всех установленных через
cargo installпакетов - Сравнивать их с последними версиями на crates.io
- Обновлять только те пакеты, для которых вышла новая версия
- Работать с конкретными пакетами, если указать их имена
Установка плагина:
cargo install cargo-install-update
Использование:
# Обновить все установленные утилиты
cargo install-update -a
# Обновить только конкретные утилиты
cargo install-update ripgrep bat fd
# Проверить, какие утилиты можно обновить (без фактического обновления)
cargo install-update -a -l
Плагин работает быстро и безопасно. Он использует кэш Cargo и не пересобирает пакеты, если версия не изменилась.
Вариант 2: Использование `cargo-update` (более легковесный)
Существует ещё один плагин — cargo-update. Он немного проще и работает по тому же принципу:
# Установка
cargo install cargo-update
# Обновление всех установленных пакетов
cargo update-all
# Обновление конкретного пакета
cargo update ripgrep
Вариант 3: Скрипт на Bash/PowerShell (если не хотите ставить плагины)
Если вы предпочитаете минимум зависимостей, можно написать простой скрипт. Вот пример для Bash (Linux/macOS):
#!/bin/bash
# Получаем список всех установленных через cargo install пакетов
cargo install --list | grep -E '^[a-zA-Z]' | awk '{print $1}' | while read -r package; do
echo "Обновляю $package..."
cargo install "$package" 2>/dev/null
done
echo "Готово!"
Важное замечание: Если вы используете cargo install с флагом --version для фиксации конкретной версии (например, для стабильности в CI/CD), то плагины cargo-install-update и cargo-update это учтут и не будут обновлять такие пакеты — они обновят только те, которые были установлены без указания версии.
Рекомендация
Я настоятельно рекомендую cargo-install-update. Он активно поддерживается, имеет понятный вывод и хорошо интегрируется с экосистемой Cargo. Установите его один раз и забудьте о ручном удалении/переустановке.
Альтернативный подход: Использование `rustup` и управление через инструментарий
Если вы используете rustup (а скорее всего используете, так как это стандартный способ установки Rust), у вас есть ещё один вариант — не обновлять отдельные утилиты, а управлять всей экосистемой через компоненты rustup.
Некоторые популярные утилиты, такие как clippy, rustfmt, rust-analyzer, поставляются как компоненты rustup и обновляются вместе с компилятором:
rustup update
Для остальных утилит можно использовать cargo binstall — альтернативу cargo install, которая скачивает готовые бинарники (если они доступны) вместо компиляции из исходников. Это работает быстрее и не требует установки дополнительных плагинов для обновления:
cargo binstall ripgrep
При повторном запуске cargo binstall автоматически проверяет версию и обновляет пакет, если есть новая. Это не массовое решение, но для точечного обновления — очень удобно.
Если вам нужно массовое обновление, то без cargo-install-update или аналогичного плагина не обойтись, но для повседневной работы cargo binstall может быть хорошей альтернативой, особенно если вы часто устанавливаете новые инструменты.