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.
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.
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.
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.
brew rmtree
ne 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
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
.
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 .
Vous pouvez simplement utiliser un tuyau UNIX pour cela
brew deps [FORMULA] | xargs brew rm
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
.
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.
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).
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
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.
$