«Cargo install» gibt es, aber «cargo update» nicht? Der bekannte Schmerz eines jeden Rust-Entwicklers
\n\nSie haben gerade cargo install ripgrep ausgeführt, um die aktuelle Binärdatei rg zu erhalten. Eine Woche ist vergangen. Sie hören, dass eine neue Version erschienen ist – 14.1.0 statt 13.0.0. Und dann stellt sich die berechtigte Frage: «Does cargo install have an equivalent update command?»
Diese Frage hat auf Stack Overflow tausende Aufrufe gesammelt. Und das zu Recht. Tatsache ist, dass es in cargo keinen integrierten Befehl cargo install update gibt. Nein, Sie sehen nicht doppelt. Es gibt ihn wirklich nicht. Aber das bedeutet nicht, dass Sie dazu verdammt sind, neue Versionen manuell herunterzuladen. Es gibt mehrere Ansätze, und wir werden sie alle durchgehen – von den einfachen bis zu den eleganten.
In diesem Artikel übersetzen wir nicht nur die Antwort von Stack Overflow. Wir vergleichen die Ansätze, zeigen echten Code und geben umsetzbare Tipps. Los geht's!
\n\nWarum gibt es in Cargo keinen Befehl «update» für installierte Crates?
\n\nBevor wir uns auf die Suche nach Fehlern stürzen, lassen Sie uns die Philosophie verstehen. cargo install ist dazu gedacht, binäre Crates zu installieren (diejenigen, die im Cargo.toml einen Abschnitt [[bin]] haben). Es ist kein Paketmanager im Stil von apt oder npm. Cargo ist in erster Linie ein Builder und Abhängigkeitsmanager für Projekte, kein globaler Software-Installer.
Der Befehl cargo update existiert, aber er funktioniert innerhalb eines Projekts – er aktualisiert die Abhängigkeiten in Cargo.lock. Für global installierte Binärdateien wird eine andere Lösung benötigt.
Methode Nr. 1: Klassische Neuinstallation (cargo install --force)
\n\nDie einfachste und offensichtlichste Methode ist die Neuinstallation des Crates mit dem Flag --force:
# Erstmalig installiert\ncargo install ripgrep\n\n# Eine Woche später – aktualisieren\ncargo install --force ripgrep\n\n\nWas passiert unter der Haube? Cargo lädt die neueste Version des Crates von crates.io herunter, kompiliert sie neu und ersetzt die Binärdatei. Das Flag --force erzwingt das Überschreiben der vorhandenen Datei, selbst wenn die Version identisch ist.
Vorteile:
\n- \n
- Erfordert keine Installation zusätzlicher Tools \n
- Funktioniert immer und überall \n
- Intuitiv verständlich \n
Nachteile:
\n- \n
- Jedes Mal vollständige Neukompilierung (zeitaufwendig, wenn der Crate groß ist) \n
- Keine Überprüfung, ob eine neue Version erschienen ist – Sie installieren einfach neu \n
- Unbequem, wenn Sie 10+ Crates installiert haben \n
Das ist, als würde man Windows neu installieren, um einen Treiber zu aktualisieren. Funktioniert es? Ja. Optimal? Nein.
\n\nMethode Nr. 2: cargo-outdated – intelligenter Detektor für veraltete Crates
\n\nWenn Sie sicher wissen möchten, dass ein Update erforderlich ist, installieren Sie cargo-outdated:
cargo install cargo-outdated\n\n\nÜberprüfen Sie nun, welche Crates veraltet sind:
\n\ncargo outdated --root ~/.cargo\n\n\nDie Ausgabe zeigt etwa Folgendes an:
\n\nPackage Current Latest Deps\nripgrep 13.0.0 14.1.0 -\nbat 0.22.1 0.23.0 -\n\n\nAnschließend können Sie den spezifischen Crate über cargo install --force aktualisieren. Aber das sind immer noch zwei Schritte. Sie möchten Automatisierung? Lesen Sie weiter.
Vorteile:
\n- \n
- Zeigt nur die Crates an, die tatsächlich veraltet sind \n
- Funktioniert auch für Projektabhängigkeiten \n
- Verfügt über Optionen zur Filterung \n
Nachteile:
\n- \n
- Aktualisiert nicht selbst – informiert nur \n
- Erfordert eine separate Installation \n
Methode Nr. 3: cargo-update (ja, es gibt diesen Crate!)
\n\nDie eleganteste Antwort auf die Frage «Does cargo install have an equivalent update command?» ist