Ich habe eine Homebrew- Formel, die ich zusammen mit all ihren Abhängigkeiten deinstallieren / entfernen möchte, wobei Pakete übersprungen werden, von denen andere Pakete abhängen (auch bekannt als Cascading Package Remove in Package Manager).
zB Deinstallieren Sie das Paket, a
das von den Paketen b
& abhängt c
, wobei das Paket d
auch vom Paket abhängt c
. Das Ergebnis sollte sowohl a
& deinstallieren als b
auch überspringen c
.
Wie kann ich das machen?
Es muss eine Möglichkeit geben, ein Paket zu deinstallieren, ohne unnötigen Müll zurückzulassen.
Antworten:
BEARBEITEN:
Es sieht so aus, als ob das Problem jetzt mit einem externen Befehl namens
brew rmdeps
oder behoben wirdbrew rmtree
.Geben Sie zur Installation und Verwendung die folgenden Befehle aus:
Weitere Informationen und Diskussionen finden Sie unter dem obigen Link.
Ursprüngliche Antwort:
Es scheint, dass es derzeit keinen einfachen Weg gibt, dies zu erreichen.
Ich habe jedoch ein Problem auf der GitHub-Seite von Homebrew eingereicht , und jemand hat eine vorübergehende Lösung vorgeschlagen, bis er einen exklusiven Befehl zur Lösung dieses Problems hinzugefügt hat.
Es wird ein externer Befehl aufgerufen,
brew leaves
der alle Pakete druckt, die keine Abhängigkeiten von anderen Paketen sind.Wenn Sie eine logische und bei der Ausgabe von
brew leaves
undbrew deps <package>
ausführen, erhalten Sie möglicherweise nur eine Liste der verwaisten Abhängigkeitspakete, die Sie anschließend manuell deinstallieren können. Kombinieren Sie dies mitxargs
und Sie werden bekommen, was Sie brauchen, denke ich (ungetestet, rechnen Sie nicht damit).EDIT: Jemand hat gerade eine sehr ähnliche Lösung vorgeschlagen,
join
anstattxargs
:Weitere Informationen finden Sie im Kommentar zu dem oben genannten Problem .
quelle
This command requires a keg argument
.brew rmtree
Skript eines Drittanbieters ist jetzt verfügbar:brew tap beeftornado/rmtree && brew install beeftornado/rmtree/brew-rmtree
brew rm $(join <(brew leaves) <(brew deps FORMULA))
macht den Job gut. Sie müssen es nur immer wieder ausführen, bis alle Abhängigkeiten entfernt sind. Es kann nicht alles auf einmal deinstalliert werden, da die Abhängigkeiten voneinander abhängig sind.&& brew install brew-rmtree
ist nicht mehr nötig.Das Ziel hier ist es, das angegebene Paket und seine Abhängigkeiten zu entfernen, ohne die Abhängigkeiten eines anderen Pakets zu zerstören. Ich benutze diesen Befehl:
Hinweis: Bearbeitet, um den hilfreichen Kommentar von @ alphadogg wiederzugeben.
quelle
--ignore-dependencies
, um zu entfernen, damit dies funktioniert.brew rmtree
funktioniert überhaupt nicht . Über die Links zu diesem Thema habe ich rmrec gefunden, das tatsächlich funktioniert. Gott weiß, warumbrew
dies nicht als einheimischer Befehl gilt.quelle
[FORMULA]
und dann rmrec verwenden rekursiv alle Abhängigkeiten ordnungsgemäß zu entfernen.rmrec
auch, dass Pakete mit Namespace derzeit nicht sehr gut verarbeitet werden. Ich habe etwas verwendet, das eingezogen wurde,linuxbrew/xorg/xorg
und es hat alles außer diesem Paket entfernt und sogar dieses Paket explizit benannt, es konnte es nicht auflösen und hat nichts getan.rmrec
schlecht ist. Abhängigkeiten werden überhaupt nicht behandelt.rmtree
?rmrec
behandelt Abhängigkeiten.God knows why brew doesn't have this as a native command.
=> Weil Brauentwickler schlechte Einstellungen haben. Sie erlauben den Leuten nicht einmal, irgendwelche Probleme zu eröffnen. Überprüfen Sie github.com/Homebrew/brew , es hat jetzt nur weniger als 20 Probleme. So eine kleine Anzahl. Ist das eine gute Sache? Nein, es ist sehr schlimm.Basierend auf der Antwort von @jfmercer (Korrekturen sind mehr als ein Kommentar erforderlich).
Entfernen Sie die Abhängigkeiten des Pakets (entfernt das Paket nicht):
Paket entfernen:
Fehlende Bibliotheken neu installieren:
Getestete Deinstallation
meld
nach dem Erkennen von MeldMerge-Versionen .quelle
Um diese Antwort zu verwenden, müssen Sie eine Datei erstellen und verwalten, die die Paketnamen enthält, die auf Ihrem System installiert werden sollen. Wenn Sie noch keinen haben, verwenden Sie den folgenden Befehl und löschen Sie die Paketnamen, die nicht installiert bleiben sollen.
Anschließend können Sie alle installierten, aber unerwünschten Pakete und unnötigen Abhängigkeiten entfernen, indem Sie den folgenden Befehl ausführen
brew_clean
ist hier verfügbar: https://gist.github.com/cskeeters/10ff1295bca93808213dDieses Skript ruft alle Pakete ab, die Sie in brown_packages angegeben haben, sowie alle ihre Abhängigkeiten und vergleicht sie mit der Ausgabe von
brew list
und entfernt schließlich die unerwünschten Pakete, nachdem diese Liste mit dem Benutzer überprüft wurde.Wenn Sie zu diesem Zeitpunkt das Paket entfernen möchten, entfernen
a
Sie es einfach aus der Datei brown_packages und führen Sie es erneut ausbrew_clean brew_packages
. Es wird entferntb
, aber nichtc
.quelle
brew clean -s
brew cleanup -s && brew cask cleanup
Sie können hierfür einfach eine UNIX-Pipe verwenden
quelle
brew missing
haben. Dieser sagt Ihnen, welchen Befehl Sie ausführen müssen, um sie zurückzubekommenSpeichern Sie das folgende Skript als Brew-Purge
Installieren Sie es nun mit dem folgenden Befehl
Führen Sie es jetzt aus
Beispiel mit gpg
quelle
Andere Antworten haben bei mir nicht funktioniert, aber das hat (in der
fish
Shell) funktioniert :Weil
brew remove $p
fehlschlägt, wenn ein anderes Paket davon abhängtp
.quelle
Eine umfassendere Bourne Shell-Funktion
Es gibt bereits eine Reihe guter Antworten, aber einige sind veraltet und keine vollständig. Insbesondere entfernen die meisten von ihnen Abhängigkeiten, überlassen es Ihnen jedoch, die ursprünglich anvisierte Formel anschließend zu entfernen. Die Arbeit mit den veröffentlichten Einzeilern kann auch mühsam sein, wenn Sie mehr als eine Formel gleichzeitig deinstallieren möchten.
Hier ist eine Bourne-kompatible Shell-Funktion (ohne bekannte Bashisms), die eine Liste von Formeln erstellt, die jeweiligen Abhängigkeiten entfernt, alle Kopien der Formel selbst entfernt und dann fehlende Abhängigkeiten neu installiert.
Es wurde auf Homebrew 1.7.4 getestet.
Vorsichtsmaßnahmen
Dies funktioniert mit allen Standardformeln, die ich getestet habe. Derzeit werden keine Fässer verarbeitet, aber es wird auch nicht lautstark beanstandet, wenn Sie versuchen, ein Fass mit dem gleichen Namen wie eine Standardformel (z. B. MacVim) zu lösen.
quelle
Die Antwort von @jfmercer muss leicht geändert werden, um mit dem aktuellen Gebräu zu arbeiten, da sich die Ausgabe von
brew missing
geändert hat:quelle