Désinstaller toutes les gemmes installées, sous OSX?

180

Il y a des cas où je voudrais revenir et désinstaller toutes les installations de gemmes précédentes.

Par exemple, j'avais besoin d'aider un ami à migrer sa machine de développement de rails pour utiliser RVM. Comme ils utilisaient auparavant le système à l'échelle du système gem, il éprouvait de nombreux maux de tête lorsqu'il travaillait sur plusieurs projets. Essentiellement, il était l'affiche d'un converti RVM.

Comment puis-je désinstaller élégamment toutes les gemmes de son système OSX?

crftr
la source
1
De nos jours, cela n'est plus nécessaire. RVM sait où chercher les gemmes après avoir basculé vers la bonne version Ruby.
Franklin Yu
1
yes Y | gem uninstall -a -I
stopanko
Juste un petit mot à @FranklinYu - ce n'est pas toujours le cas. J'ai eu des cas où une copie installée globalement de Nokogiri semblait toujours prendre le pas sur l'ensemble de gemmes RVM, et la copie globale a dû être désinstallée.
Nathan Crause
@NathanCrause Alors c'est un bug dans RVM et il faut le signaler. Je suis presque sûr que ce n'est pas le comportement prévu de RVM.
Franklin Yu
@FranklinYu vous avez raison, mais jusqu'à ce qu'un tel problème soit résolu, il serait toujours nécessaire de trouver un moyen de purger toutes les gemmes. Je faisais simplement référence au fait que cela était "inutile", ce qui serait vrai dans une situation idéale, mais bon, les choses tournent mal tout le temps.
Nathan Crause

Réponses:

430

Rubygèmes> = 2.1.0

gem uninstall -aIx

asupprime toutes les versions
Iignore les dépendances
xinclut les exécutables

Rubgems <2.1.0

for i in `gem list --no-versions`; do gem uninstall -aIx $i; done
crftr
la source
1
Duh, tu m'as battu à la vitesse :)
Romain
3
Alors bien sûr, vous voudrez réinstaller une liste raisonnable de gemmes par défaut qui pour moi est: "gem install bundler json minitest rdoc rdoc"
Deyon Samuel Washington
5
liste de gemmes | couper -d "" -f1 | sudo xargs gem uninstall -Iax -worked for me
lesyk
5
Ne fonctionne pas: ERROR: While executing gem ... (Gem::InstallError) gem "test-unit" cannot be uninstalled because it is a default gem(gem 2.0.3)
M. Anthony Aiello
@Anthony Bien que ce soit un peu dangereux, vous pouvez supprimer les erreurs avecfor i in `gem list --no-versions`; do gem uninstall -aIx $i 2>/dev/null; done
Darren Cheng
46

Vous pouvez également créer un nouveau Gemfile et exécuter bundle clean --force. Cela supprimera toutes les autres gemmes qui ne sont pas incluses dans le nouveau Gemfile.

bswinnerton
la source
3
Ceci est très utile :)
user1190286
1
meilleure réponse car l'unité de test ne peut pas être désinstallée et tue le processus.
westonplatter
2
Oui, c'est la meilleure réponse. Je pense qu'OP devrait choisir ce post 2.0.0.
theTuxRacer
2
Cela fonctionne certainement pour moi et beaucoup plus élégant que les autres versions
Crispen Smith
29

Une version différente la plus légère, sautant l'étape de coupe, profitant de l'option '--no-version':

gem list --no-version |xargs gem uninstall -ax

Puisque vous supprimez tout, je ne vois pas la nécessité de l'option «I». Chaque fois que la gemme est retirée, tout va bien.

Thiago Ganzarolli
la source
1
sudone devrait pas être nécessaire si les gemmes ont été installées par un utilisateur ordinaire.
sampablokuper
Voir ma réponse pour une raison pour laquelle j'ai voté contre. Je voulais faire un commentaire ici mais les commentaires n'autorisent pas les lignes ...
aercolino
bon, peut supprimer beaucoup de gemmes, mais quelque chose ne ressemble pas à un bundle, un rake, un rvm
coolesting
Très élégant mais échoue en raison de l'impossibilité de supprimer les gemmes par défaut. Suggérer plutôt la solution de
crftr
11

Assurez-vous d'abord que vous avez au moins la version 2.1.0 de gem

gem update --system
gem --version
# 2.6.4

Pour désinstaller, exécutez simplement:

gem uninstall --all

Vous devrez peut-être utiliser la sudocommande:

sudo gem uninstall --all
collecte
la source
10

Utilisez soit

$ gem list --no-version | xargs gem uninstall -ax

ou

$ sudo gem list --no-version | xargs sudo gem uninstall -ax

Selon ce que vous voulez, vous devrez peut-être exécuter les deux, car "gem list" et "sudo gem list" fournissent des listes indépendantes.

Ne mélangez pas une "liste de gemmes" normale avec une "désinstallation de gemmes" sudo-ed ni l'inverse, sinon vous risquez de désinstaller les gemmes installées sur sudo (anciennement) ou d'obtenir beaucoup d'erreurs (ce dernier).

Aercolino
la source
Vous avez raison, j'ai modifié ma réponse pour exclure sudo. Pour les deux versions, les utilisateurs peuvent se fier à votre réponse.
Thiago Ganzarolli
9

Si vous utilisez la version Rubygems 2.1.0 ou ultérieure, vous pouvez essayer: gem uninstall --all.

rrrub
la source
3
Ce devrait être un «bijou» et non un «bijou».
récupérer le
6

Si vous aimez le faire avec du rubis:

ruby -e "`gem list`.split(/$/).each { |line| puts `gem uninstall -Iax #{line.split(' ')[0]}` unless line.strip.empty? }"

À votre santé

Haris Krajina
la source
J'obtiens une erreur avec ceci: ERREUR: Lors de l'exécution de gem ... (Gem :: CommandLineError) Veuillez spécifier au moins un nom de gemme (par exemple gem build GEMNAME)
mbdev
1
@mbdev Fixed, hehe fournissant un support à mes réponses sur Stack Overflow :)
Haris Krajina
Ceci est pratique dans la mesure où cela fonctionne sous Windows où le shell de commande n'est ... pas bon.
AdamC
5

Rubygèmes> = 2.1.0

gem uninstall -aIx

Si le terminal retourne en dessous de l'erreur

ERROR:  While executing gem ... (Gem::FilePermissionError)
You don't have write permissions for the /Library/Ruby/Gems/2.0.0 directory.

Ensuite, écrivez la commande ci-dessus comme ci-dessous

sudo gem uninstall -aIx

Et entrez le mot de passe de votre compte Mac OS Terminé !!

Kirtikumar A.
la source
5

Et pour ceux d'entre vous qui sont ici parce que vous voulez supprimer toutes les gemmes avec un certain préfixe ( ahem je vous regarde aws-sdk!), Vous pouvez exécuter quelque chose comme ceci:

gem list --no-version | grep "aws-sdk-" | xargs gem uninstall -aIx

Mettez évidemment votre requête au lieu de aws-sdk-. Vous avez besoin du -Idedans pour ignorer les dépendances.

Adopté la réponse précédente d'Ando

Trevor Elwell
la source
4

La seule commande m'a aidé à nettoyer toutes les gemmes et ignore les gemmes par défaut, qui ne peuvent pas être désinstallées

for x in `gem list --no-versions`; do gem uninstall $x -a -x -I; done
Attenzione
la source
2

Je l'ai fait il n'y a pas si longtemps (même situation de commutateur RVM affiche-enfant):

gem list | cut -d" " -f1 | sudo xargs gem uninstall -Iax

Prend la liste de toutes les gemmes (y compris les éléments de version), la coupe pour ne conserver que le nom de la gemme, puis désinstalle toutes les versions de ces gemmes.

Le sudon'est utile que si vous avez installé des gemmes à l'échelle du système et ne doit pas être inclus sauf si nécessaire.

Romain
la source
1

Lorsque vous essayez de supprimer les gemmes installées en tant que root, xargs semble s'arrêter lorsqu'il rencontre une erreur en essayant de désinstaller un gem par défaut:

sudo gem list | cut -d" " -f1 | xargs gem uninstall -aIx
# ERROR:  While executing gem ... (Gem::InstallError)
#    gem "test-unit" cannot be uninstalled because it is a default gem


Cela ne fonctionnera pas pour tout le monde, mais voici ce que j'ai utilisé à la place:

sudo for gem (`gem list | cut -d" " -f1`); do gem uninstall $gem -aIx; done
Zaz
la source
1
gem list --no-version | grep -v -e 'psych' -e 'rdoc' -e 'openssl' -e 'json' -e 'io-console' -e 'bigdecimal' | xargs sudo gem uninstall -ax

grep exclut ici les gemmes par défaut. Toutes les autres gemmes seront désinstallées. Vous pouvez également le faire précéder sudoau cas où vous auriez des problèmes d'autorisation.

moeabdol
la source