Cargo install update: Wie man binäre Crates in Rust aktualisiert

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

«Cargo install» gibt es, aber «cargo update» nicht? Der bekannte Schmerz eines jeden Rust-Entwicklers

\n\n

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

\n\n

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.

\n\n

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

Warum gibt es in Cargo keinen Befehl «update» für installierte Crates?

\n\n

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

\n\n

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.

\n\n

Methode Nr. 1: Klassische Neuinstallation (cargo install --force)

\n\n

Die einfachste und offensichtlichste Methode ist die Neuinstallation des Crates mit dem Flag --force:

\n\n
# Erstmalig installiert\ncargo install ripgrep\n\n# Eine Woche später – aktualisieren\ncargo install --force ripgrep\n
\n\n

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

\n\n

Vorteile:

\n
    \n
  • Erfordert keine Installation zusätzlicher Tools
  • \n
  • Funktioniert immer und überall
  • \n
  • Intuitiv verständlich
  • \n
\n\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
\n\n

Das ist, als würde man Windows neu installieren, um einen Treiber zu aktualisieren. Funktioniert es? Ja. Optimal? Nein.

\n\n

Methode Nr. 2: cargo-outdated – intelligenter Detektor für veraltete Crates

\n\n

Wenn Sie sicher wissen möchten, dass ein Update erforderlich ist, installieren Sie cargo-outdated:

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

Überprüfen Sie nun, welche Crates veraltet sind:

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

Die Ausgabe zeigt etwa Folgendes an:

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

Anschließ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.

\n\n

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

Nachteile:

\n
    \n
  • Aktualisiert nicht selbst – informiert nur
  • \n
  • Erfordert eine separate Installation
  • \n
\n\n

Methode Nr. 3: cargo-update (ja, es gibt diesen Crate!)

\n\n

Die eleganteste Antwort auf die Frage «Does cargo install have an equivalent update command?» ist

Blogs

Buchempfehlungen