569 Stimmen

Deinstallieren/Entfernen eines Homebrew-Pakets mit all seinen Abhängigkeiten

Ich habe eine Selbstgebrautes Formel, die ich zusammen mit all ihren Abhängigkeiten deinstallieren/entfernen möchte, wobei Pakete übersprungen werden, von denen andere Pakete abhängen (z.B. Kaskadierte Paketentfernung im Sprachgebrauch der Paketverwaltung).

z.B.. Paket deinstallieren a die von folgenden Paketen abhängt b & c , wobei Paket d hängt auch vom Paket c . Das Ergebnis sollte beide deinstallieren a & b , Überspringen c .

Wie kann ich das tun?

Es muss eine Möglichkeit geben, ein Paket zu deinstallieren, ohne unnötige Schrott hinten.

26 Stimmen

Ist das nicht das, was jeder Paketmanager, der diesen Namen verdient, von Haus aus tun sollte? LOL

28 Stimmen

Ab 2021, brew autoremove ist das, wonach Sie suchen:

518voto

Ory Band Punkte 12928

EDIT :

Es sieht so aus wird das Problem nun durch einen externen Befehl namens brew rmdeps o brew rmtree .

Zur Installation und Verwendung geben Sie die folgenden Befehle ein:

$ brew tap beeftornado/rmtree
$ brew rmtree <package>

Unter dem obigen Link finden Sie weitere Informationen und Diskussionen.


[EDIT] siehe den neuen Befehl brew autoremove sur https://stackoverflow.com/a/66719581/160968


Ursprüngliche Antwort:

Es scheint, dass es derzeit keine einfache Möglichkeit gibt, dies zu erreichen.

Aber ich einen Fehler auf der GitHub-Seite von Homebrew gemeldet und jemand schlug eine vorübergehende Lösung vor, bis sie einen exklusiven Befehl hinzufügen, um dieses Problem zu lösen.

Es gibt eine externes Kommando genannt. brew leaves das alle Pakete ausgibt, die nicht von anderen Paketen abhängig sind.

Wenn Sie eine logische et auf die Ausgabe von brew leaves y brew deps <package> erhalten Sie möglicherweise nur eine Liste der verwaisten Abhängigkeitspakete, die Sie anschließend manuell deinstallieren können. Kombinieren Sie dies mit xargs und Sie werden bekommen, was Sie brauchen, denke ich (ungetestet, verlassen Sie sich nicht darauf).


EDIT : Jemand hat gerade eine sehr ähnliche Lösung vorgeschlagen, nämlich die Verwendung von join anstelle von xargs :

brew rm FORMULA
brew rm $(join <(brew leaves) <(brew deps FORMULA))

Siehe die Stellungnahme zu dem oben genannten Problem für weitere Informationen.

3 Stimmen

Im Jahr 2020 scheint diese Lösung die beste aller hier vorgestellten Welten zu sein. Es ist erwähnenswert, dass in den meisten Fällen nach dem Bereinigen einer Vielzahl von Paketen Folgendes erforderlich ist brew cleanup -s && \rm -rf "$(brew --cache)"

441voto

hsym Punkte 3047

Bis Ende 2020 fügte das Homebrew-Team einen einfachen Befehl hinzu brew autoremove um alle nicht verwendeten Abhängigkeiten zu entfernen.

Deinstallieren Sie zunächst das Paket:

brew uninstall <package>

Entfernen Sie dann alle nicht verwendeten Abhängigkeiten:

brew autoremove

0 Stimmen

Dies entfernt auch einige Pakete, die in brewfile aufgelistet sind, warum?

5 Stimmen

@stevemao Versuchen Sie, das Homebrew-Team zu fragen.

46voto

Timmmm Punkte 76756

brew rmtree Funktioniert überhaupt nicht . Unter den Links zu diesem Thema fand ich rmrec was auch tatsächlich funktioniert. Gott weiß warum brew verfügt nicht über einen solchen Befehl.

brew tap ggpeti/rmrec
brew rmrec pkgname

0 Stimmen

Wirklich LIEBEN, obwohl, wenn Sie bereits auf dem Weg der Deinstallation selbst begonnen haben und immer mehr Pakete finden, die Sie entfernen müssen, müssen Sie immer noch wissen, welche die am meisten berührenden Pakete sind, oder Sie können einfach kurz neu installieren die [FORMULA] und verwenden Sie dann rmrec, um rekursiv alle Abhängigkeiten ordnungsgemäß zu entfernen.

3 Stimmen

Caveat: Es scheint auch rmrec kann derzeit nicht sehr gut mit Namespaced-Paketen umgehen. Ich habe etwas verwendet, das linuxbrew/xorg/xorg und es wurde alles außer diesem Paket entfernt, und selbst wenn das Paket explizit genannt wurde, konnte es nicht aufgelöst werden und tat nichts.

0 Stimmen

Bestätigt, dass die Empfehlung zur Verwendung von rmrec ist schlecht. Es geht überhaupt nicht mit Abhängigkeiten um.

38voto

jfmercer Punkte 3461

Das Ziel ist es, das angegebene Paket und seine Abhängigkeiten zu entfernen ohne die Abhängigkeiten eines anderen Pakets brechen. Ich verwende diesen Befehl:

brew deps [FORMULA] | xargs brew remove --ignore-dependencies && brew missing | xargs brew install

Hinweis: Bearbeitet, um den hilfreichen Kommentar von @alphadogg zu berücksichtigen.

0 Stimmen

Musste hinzufügen --ignore-dependencies zu entfernen, damit dies funktionieren kann.

8 Stimmen

Dies hat meine brew-Konfiguration zerstört, da es die Deps, die in anderen Paketen verwendet werden, nicht neu installiert hat. NICHT VERWENDEN

23voto

vault Punkte 3584

Basierend auf der Antwort von @jfmercer (Korrekturen waren mehr als ein Kommentar erforderlich).

Entfernt die Abhängigkeiten des Pakets (entfernt nicht das Paket):

brew deps [FORMULA] | xargs brew remove --ignore-dependencies

Entfernen Sie die Verpackung:

brew remove [FORMULA]

Installieren Sie fehlende Bibliotheken neu:

brew missing | cut -d: -f2 | sort | uniq | xargs brew install

Getestetes Deinstallieren meld nach der Entdeckung MeldMerge veröffentlicht .

1 Stimmen

Ich hatte ffmpeg mit brew installiert, was die Dinge stark durcheinanderbrachte. Bereinigung ffmpeg, einschließlich seiner erweiterten Liste von Abhängigkeiten, mit der oben beschriebenen Methode, arbeitete für mich.

1 Stimmen

Für mich brew deps zeigen andere Pakete als die, die nach brew uninstall Versuch.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X