« Cargo install » existe, mais « cargo update » non ? La douleur familière de chaque développeur Rust
\n\nVous venez d'exécuter cargo install ripgrep pour obtenir le binaire frais rg. Une semaine passe. Vous apprenez qu'une nouvelle version est sortie — 14.1.0 au lieu de 13.0.0. Et là, une question légitime se pose : « Does cargo install have an equivalent update command? »
Cette question a recueilli des milliers de vues sur Stack Overflow. Et ce n'est pas pour rien. Le fait est que cargo n'a pas de commande intégrée cargo install update. Non, vous n'avez pas perdu la vue. Il n'y en a vraiment pas. Mais cela ne signifie pas que vous êtes condamné à télécharger manuellement les nouvelles versions. Il existe plusieurs approches, et nous allons toutes les détailler — des plus simples aux plus élégantes.
Dans cet article, nous ne nous contenterons pas de traduire la réponse de Stack Overflow. Nous comparerons les approches, montrerons du code réel et donnerons des conseils actionnables. C'est parti !
\n\nPourquoi Cargo n'a-t-il pas de commande « update » pour les crates installées ?
\n\nAvant de vous précipiter pour chercher des bugs, comprenons la philosophie. cargo install est conçu pour installer des crates binaires (celles qui ont une section [[bin]] dans leur Cargo.toml). Ce n'est pas un gestionnaire de paquets à la apt ou npm. Cargo est avant tout un compilateur et gestionnaire de dépendances pour les projets, et non un installateur global de logiciels.
La commande cargo update existe, mais elle fonctionne à l'intérieur d'un projet — elle met à jour les dépendances dans Cargo.lock. Pour les binaires installés globalement, une autre solution est nécessaire.
Méthode n°1 : La réinstallation classique (cargo install --force)
\n\nLa méthode la plus simple et la plus évidente est de réinstaller la crate avec le drapeau --force :
# Installation initiale\ncargo install ripgrep\n\n# Une semaine plus tard — mise à jour\ncargo install --force ripgrep\n\n\nQue se passe-t-il sous le capot ? Cargo télécharge la dernière version de la crate depuis crates.io, la recompile et remplace le binaire. Le drapeau --force force l'écrasement du fichier existant, même si la version est la même.
Avantages :
\n- \n
- Ne nécessite pas l'installation d'outils supplémentaires \n
- Fonctionne toujours et partout \n
- Intuitif \n
Inconvénients :
\n- \n
- Recompilation complète à chaque fois (longue si la crate est volumineuse) \n
- Pas de vérification si une nouvelle version est sortie — vous réinstallez simplement \n
- Peu pratique si vous avez 10 crates ou plus installées \n
C'est comme réinstaller Windows pour mettre à jour un pilote. Ça marche ? Oui. Optimal ? Non.
\n\nMéthode n°2 : cargo-outdated — le détecteur intelligent de crates obsolètes
\n\nSi vous voulez être certain qu'une mise à jour est nécessaire, installez cargo-outdated :
cargo install cargo-outdated\n\n\nVérifiez maintenant quelles crates sont obsolètes :
\n\ncargo outdated --root ~/.cargo\n\n\nLa sortie affichera quelque chose comme :
\n\nPackage Current Latest Deps\nripgrep 13.0.0 14.1.0 -\nbat 0.22.1 0.23.0 -\n\n\nEnsuite, vous pouvez mettre à jour une crate spécifique avec cargo install --force. Mais cela reste deux étapes. Vous voulez de l'automatisation ? Lisez la suite.
Avantages :
\n- \n
- Affiche uniquement les crates réellement obsolètes \n
- Fonctionne également pour les dépendances de projet \n
- Possède des options de filtrage \n
Inconvénients :
\n- \n
- Ne met pas à jour lui-même — il informe seulement \n
- Nécessite une installation séparée \n
Méthode n°3 : cargo-update (oui, cette crate existe !)
\n\nLa réponse la plus élégante à la question « Does cargo install have an equivalent update command? » est