Mise à jour de cargo install : comment mettre à jour les crates binaires dans Rust

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

« Cargo install » existe, mais « cargo update » non ? La douleur familière de chaque développeur Rust

\n\n

Vous 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? »

\n\n

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.

\n\n

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\n

Pourquoi Cargo n'a-t-il pas de commande « update » pour les crates installées ?

\n\n

Avant 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.

\n\n

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.

\n\n

Méthode n°1 : La réinstallation classique (cargo install --force)

\n\n

La méthode la plus simple et la plus évidente est de réinstaller la crate avec le drapeau --force :

\n\n
# Installation initiale\ncargo install ripgrep\n\n# Une semaine plus tard — mise à jour\ncargo install --force ripgrep\n
\n\n

Que 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.

\n\n

Avantages :

\n
    \n
  • Ne nécessite pas l'installation d'outils supplémentaires
  • \n
  • Fonctionne toujours et partout
  • \n
  • Intuitif
  • \n
\n\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
\n\n

C'est comme réinstaller Windows pour mettre à jour un pilote. Ça marche ? Oui. Optimal ? Non.

\n\n

Méthode n°2 : cargo-outdated — le détecteur intelligent de crates obsolètes

\n\n

Si vous voulez être certain qu'une mise à jour est nécessaire, installez cargo-outdated :

\n\n
cargo install cargo-outdated\n
\n\n

Vérifiez maintenant quelles crates sont obsolètes :

\n\n
cargo outdated --root ~/.cargo\n
\n\n

La sortie affichera quelque chose comme :

\n\n
Package    Current  Latest  Deps\nripgrep    13.0.0   14.1.0  -\nbat        0.22.1   0.23.0  -\n
\n\n

Ensuite, 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.

\n\n

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
\n\n

Inconvénients :

\n
    \n
  • Ne met pas à jour lui-même — il informe seulement
  • \n
  • Nécessite une installation séparée
  • \n
\n\n

Méthode n°3 : cargo-update (oui, cette crate existe !)

\n\n

La réponse la plus élégante à la question « Does cargo install have an equivalent update command? » est

Blogs

Book Recommendations