it-swarm.com.de

Deinstallieren/Entfernen Sie ein Homebrew-Paket mit allen Abhängigkeiten

Ich habe ein Homebrew - Paket, das ich mit all seinen Abhängigkeiten deinstallieren/entfernen möchte, wobei Pakete übersprungen werden, von denen andere Pakete abhängen.

z.B. Deinstallieren Sie das Paket a, das von den Paketen b & c abhängig ist, wobei das Paket d auch vom Paket c abhängt. Das Ergebnis sollte a & b deinstallieren und c überspringen.

Wie kann ich das machen?

Es muss eine Möglichkeit geben, ein Paket zu deinstallieren, ohne unnötiges junk hinter sich zu lassen.

278
Ory Band

BEARBEITEN:

Es sieht aus wie das Problem wird jetzt mit einem externen Befehl namens brew rmdeps oder brew rmtree gelöst .

Geben Sie zur Installation und Verwendung die folgenden Befehle ein:

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

Weitere Informationen und Diskussionen finden Sie unter dem obigen Link.


Ursprüngliche Antwort:

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

Allerdings habe ich ein Problem auf Homebrews GitHub-Seite eingereicht , und jemand hat eine temporäre Lösung vorgeschlagen, bis er einen exklusiven Befehl zum Lösen dieses Problems hinzufügt.

Es gibt einen externen Befehl namens brew leaves, der alle Pakete druckt, die keine Abhängigkeiten von anderen Paketen sind.

Wenn Sie ein logisches und für die Ausgabe von brew leaves und brew deps <package> ausführen, wird möglicherweise nur eine Liste der verwaisten Abhängigkeitspakete angezeigt, die Sie anschließend manuell deinstallieren können. Kombiniere das mit xargs und du bekommst, was du brauchst, denke ich (ungeprüft, rechne nicht damit).


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

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

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

348
Ory Band

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

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

Hinweis: Bearbeitet, um den hilfreichen Kommentar von @ alphadogg wiederzugeben.

24
jfmercer

brew rmtreefunktioniert überhaupt nicht . Über die Links zu diesem Thema habe ich rmrec gefunden, was tatsächlich funktioniert. Gott weiß, warum brew das nicht als eingeborenes Kommando hat.

brew tap ggpeti/rmrec
brew rmrec pkgname
15
Timmmm

Die Verwendung dieser Antwort erfordert, dass 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.

brew leaves > brew_packages

Sie können dann alle installierten, aber unerwünschten Pakete und alle nicht benötigten Abhängigkeiten entfernen, indem Sie den folgenden Befehl ausführen

brew_clean brew_packages

brew_clean ist hier verfügbar: https://Gist.github.com/cskeeters/10ff1295bca93808213d

Dieses Skript ruft alle in brew_packages angegebenen Pakete und alle ihre Abhängigkeiten ab, 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 an dieser Stelle das Paket a entfernen möchten, entfernen Sie es einfach aus der brew_packages-Datei und führen Sie dann brew_clean brew_packages erneut aus. Es entfernt b, aber nicht c.

12
Chad Skeeters

Basierend auf der Antwort von @jfmercer (Korrekturen benötigten mehr als einen Kommentar).

Abhängigkeiten des Pakets entfernen (Paket wird nicht entfernt):

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

Paket entfernen:

brew remove [FORMULA]

Fehlende Bibliotheken neu installieren:

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

Testen der Deinstallation von meld nach dem Erkennen von MeldMerge Releases .

10
vault

Sie können dazu einfach eine UNIX-Pipe verwenden

brew deps [FORMULA] | xargs brew rm
4
shapeshed

Andere Antworten funktionierten nicht für mich, aber dies tat es (in fish Shell):

brew remove <package>
for p in (brew deps <package>)
    brew remove $p
end

Weil brew remove $p fehlschlägt, wenn ein anderes Paket von p abhängt.

2
lcmgcd

Eine vollständigere Bourne-Shell-Funktion

Es gibt bereits einige gute Antworten, aber einige sind veraltet und keine davon ist vollständig. Insbesondere werden die meisten von ihnen Abhängigkeiten entfernen, es bleibt jedoch Ihnen überlassen, die ursprünglich angesprochene Formel anschließend zu entfernen. Die veröffentlichten Einzeiler können auch langwierig sein, wenn Sie mehrere Formeln gleichzeitig deinstallieren möchten.

Hier ist eine Bourne-kompatible Shell-Funktion (ohne bekannte Bashismen), die eine Liste von Formeln aufnimmt, die Abhängigkeiten der einzelnen entfernt, alle Kopien der Formel selbst entfernt und dann alle fehlenden Abhängigkeiten neu installiert.

unbrew () {
    local formula
    for formula in "[email protected]"; do
        brew deps "$formula" |
        xargs brew uninstall --ignore-dependencies --force
        brew uninstall --force "$formula"
    done
    brew missing | cut -f2 -d: | sort -u | xargs brew install
}

Es wurde an Homebrew 1.7.4 getestet.

Vorsichtsmaßnahmen

Dies funktioniert mit allen von mir getesteten Standardformeln. Es behandelt derzeit keine Fässer, beschwert sich aber auch nicht laut, wenn Sie versuchen, ein Fass mit dem gleichen Namen wie eine Standardformel (z. B. MacVim) zu lösen.

1
Todd A. Jacobs

Die Antwort von @jfmercer muss leicht modifiziert werden, um mit der aktuellen Ausgabe zu arbeiten, da die Ausgabe von brew missing geändert wurde:

brew deps [FORMULA] | xargs brew remove --ignore-dependencies && brew missing | cut -f1 -d: | xargs brew install
0
freytag

Speichern Sie das folgende Skript als brew-purge

#!/bin/bash
#:Usage: brew purge formula
#: 
#:Removes the package and all dependancies.
#: 
#: 
PKG="$1"
if [ -z "$PKG" ];then
   brew purge --help
   exit 1
fi
brew rm $PKG
[ $? -ne 0 ] && exit 1
while brew rm $(join <(brew leaves) <(brew deps $PKG)) 2>/dev/null
  do :
done
echo Package $PKG and its dependancies have been removed.
exit 0

Installieren Sie es jetzt mit dem folgenden Befehl

Sudo install brew-purge /usr/local/bin

Jetzt führe es aus

brew purge package

Beispiel mit gpg

$ brew purge gpg
Uninstalling /usr/local/Cellar/gnupg/2.2.13... (134 files, 11.0MB)
Uninstalling /usr/local/Cellar/adns/1.5.1... (14 files, 597.5KB)
Uninstalling /usr/local/Cellar/gnutls/3.6.6... (1,200 files, 8.9MB)
Uninstalling /usr/local/Cellar/libgcrypt/1.8.4... (21 files, 2.6MB)
Uninstalling /usr/local/Cellar/libksba/1.3.5... (14 files, 344.2KB)
Uninstalling /usr/local/Cellar/libusb/1.0.22... (29 files, 508KB)
Uninstalling /usr/local/Cellar/npth/1.6... (11 files, 71.7KB)
Uninstalling /usr/local/Cellar/pinentry/1.1.0_1... (12 files, 263.9KB)
Uninstalling /usr/local/Cellar/libassuan/2.5.3... (16 files, 444.2KB)
Uninstalling /usr/local/Cellar/libtasn1/4.13... (59 files, 436KB)
Uninstalling /usr/local/Cellar/libunistring/0.9.10... (54 files, 4.4MB)
Uninstalling /usr/local/Cellar/nettle/3.4.1... (85 files, 2MB)
Uninstalling /usr/local/Cellar/p11-kit/0.23.15... (63 files, 2.9MB)
Uninstalling /usr/local/Cellar/gmp/6.1.2_2... (18 files, 3.1MB)
Uninstalling /usr/local/Cellar/libffi/3.2.1... (16 files, 296.8KB)
Uninstalling /usr/local/Cellar/libgpg-error/1.35... (27 files, 854.8KB)
Package gpg and its dependancies have been removed.
$ 
0
Kevin Davies