web-dev-qa-db-fra.com

Désinstaller/Supprimer un paquet Homebrew incluant toutes ses dépendances

J'ai un paquet Homebrew que je souhaite désinstaller/supprimer avec toutes ses dépendances, en ignorant les paquets dont dépendent d'autres paquets.

par exemple. Uninstall package a qui dépend des packages b & c, où le package d dépend également de package c. Le résultat devrait désinstaller à la fois a & b, en ignorant c.

Comment puis je faire ça?

Il doit y avoir un moyen de désinstaller un paquet sans laisser inutiles junk behind.

278
Ory Band

MODIFIER:

Il semble que le problème est maintenant résolu à l'aide d'une commande externe appelée brew rmdeps ou brew rmtree .

Pour installer et utiliser, lancez les commandes suivantes:

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

Voir le lien ci-dessus pour plus d'informations et de discussion.


Réponse originale:

Il semble qu’à l’heure actuelle, il n’existe aucun moyen facile d’y parvenir.

Cependant, je a posé un problème sur la page GitHub de Homebrew }, et quelqu'un a suggéré une solution temporaire jusqu'à ce qu'ils ajoutent une commande exclusive pour résoudre ce problème.

Il existe une commande externe } appelée brew leaves qui affiche tous les packages qui ne sont pas des dépendances d'autres packages.

Si vous faites un logique et un logiques à la sortie de brew leaves et brew deps <package>, vous obtiendrez peut-être une liste des packages de dépendance orphelins que vous pourrez désinstaller manuellement par la suite. Combinez cela avec xargs et vous obtiendrez ce dont vous avez besoin, je suppose (non testé, ne comptez pas sur cela).


EDIT: Quelqu'un vient de suggérer une solution très similaire, en utilisant join au lieu de xargs:

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

Voir le commentaire sur le problème mentionné ci-dessus pour plus d'informations.

348
Ory Band

Le but ici est de supprimer le paquet donné et ses dépendances sans briser les dépendances d’un autre paquet. J'utilise cette commande:

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

Remarque: Modifié pour refléter le commentaire utile de @ alphadogg.

24
jfmercer

brew rmtreene fonctionne pas du tout . D'après les liens sur cette question, j'ai trouvé rmrec qui fonctionne réellement. Dieu sait pourquoi brew n'a pas cela en tant que commande native.

brew tap ggpeti/rmrec
brew rmrec pkgname
15
Timmmm

Pour utiliser cette réponse, vous devez créer et gérer un fichier contenant les noms de package que vous souhaitez installer sur votre système. Si vous n'en avez pas déjà, utilisez la commande suivante et supprimez les noms de paquetages que vous ne voulez pas garder installés.

brew leaves > brew_packages

Ensuite, vous pouvez supprimer tous les packages installés, mais non désirés, et toutes les dépendances inutiles en exécutant la commande suivante.

brew_clean brew_packages

brew_clean est disponible ici: https://Gist.github.com/cskeeters/10ff1295bca93808213d

Ce script récupère tous les packages que vous avez spécifiés dans brew_packages et toutes leurs dépendances, les compare à la sortie de brew list et supprime enfin les packages indésirables après avoir vérifié cette liste avec l'utilisateur.

À ce stade, si vous souhaitez supprimer le package a, il vous suffit de le supprimer du fichier brew_packages, puis de réexécuter brew_clean brew_packages. Cela supprimera b, mais pas c.

12
Chad Skeeters

Basé sur @jfmercer answer (les corrections nécessitaient plus qu'un commentaire).

Supprimer les dépendances du paquet (ne supprime pas le paquet):

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

Retirer le paquet:

brew remove [FORMULA]

Réinstallez les bibliothèques manquantes:

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

Testé en désinstallant meld après avoir découvert les versions de MeldMerge .

10
vault

Vous pouvez simplement utiliser un tuyau UNIX pour cela

brew deps [FORMULA] | xargs brew rm
4
shapeshed

Les autres réponses n'ont pas fonctionné pour moi, mais cela a fonctionné (dans fish Shell):

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

Parce que brew remove $p échoue lorsqu'un autre paquet dépend de p.

2
lcmgcd

Une fonction plus complète de Bourne Shell

Il existe déjà un certain nombre de bonnes réponses, mais certaines sont obsolètes et aucune d’entre elles n’est tout à fait complète. En particulier, la plupart d’entre eux supprimeront les dépendances tout en vous laissant le choix de supprimer ensuite la formule ciblée à l’origine. Il peut également s'avérer fastidieux de travailler avec les one-liners postés si vous souhaitez désinstaller plusieurs formules à la fois.

Voici une fonction Shell compatible Bourne (sans aucun bashism connu) qui prend une liste de formules, supprime les dépendances de chacune, supprime toutes les copies de la formule elle-même, puis réinstalle les dépendances manquantes.

unbrew () {
    local formula
    for formula in "$@"; 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
}

Il a été testé sur Homebrew 1.7.4.

Mises en garde

Cela fonctionne sur toutes les formules standard que j'ai testées. Il ne gère pas actuellement les fûts, mais ne se plaint pas non plus si vous essayez de dissocier un fût avec le même nom qu'une formule standard (par exemple, MacVim).

1
Todd A. Jacobs

La réponse de @jfmercer doit être légèrement modifiée pour fonctionner avec la distribution actuelle, car la sortie de brew missing a changé:

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

Enregistrez le script suivant sous 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

Maintenant, installez-le avec la commande suivante

Sudo install brew-purge /usr/local/bin

Maintenant, lancez-le

brew purge package

Exemple utilisant 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