202

There are instances where I would like to revert and uninstall all previous gem installations.

For instance, I needed to assist a friend migrate their rails development machine to use RVM. As they had been previously using the system-wide gem, he was experiencing many headaches when working with multiple projects. Essentially, he was the poster-child for an RVM convert.

How can I elegantly uninstall all of the gems on his OSX system?

the Tin Man
  • 158,662
  • 42
  • 215
  • 303
crftr
  • 8,488
  • 4
  • 34
  • 44
  • 1
    Nowadays this is unnecessary. RVM knows where to look for the gems after you switch to the right Ruby version. – Franklin Yu Jan 26 '17 at 07:27
  • 1
    `yes Y | gem uninstall -a -I` – stopanko May 17 '17 at 09:25
  • Just a quick note to @FranklinYu - this is not always the case. I've had instances where a globally installed copy of Nokogiri seemed to always be taking precedent over the RVM gemset, and the global one *had* to be uninstalled. – Nathan Crause Aug 07 '19 at 17:46
  • @NathanCrause Then it’s a bug in RVM and should be reported. I’m pretty sure this isn’t the intended behavior of RVM. – Franklin Yu Aug 07 '19 at 18:14
  • @FranklinYu you're right, but until such an issue is resolved, there would still be the need for a way to purge all gems. I was only referring to the point of it being "unnecessary", which would be true in an ideal situation, but hey, things go sideways all the time. – Nathan Crause Aug 08 '19 at 18:58

13 Answers13

469

Rubygems >= 2.1.0

gem uninstall -aIx

a removes all versions
I ignores dependencies
x includes executables

Rubgems < 2.1.0

for i in `gem list --no-versions`; do gem uninstall -aIx $i; done
grizzthedj
  • 7,131
  • 16
  • 42
  • 62
crftr
  • 8,488
  • 4
  • 34
  • 44
  • 1
    Duh, you beat me to the speed :) – Romain Nov 11 '11 at 14:20
  • 3
    Then of course, you'll want to re-install a sane list of default gems which for me is: "gem install bundler json minitest rake rdoc" – Wil Moore III May 02 '12 at 08:33
  • 5
    gem list | cut -d" " -f1 | sudo xargs gem uninstall -Iax -worked for me – lesyk May 28 '12 at 13:10
  • 8
    Does not work: `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 Sep 03 '13 at 19:39
  • @Anthony Though this is a bit dangerous, you can suppress errors with `for i in \`gem list --no-versions\`; do gem uninstall -aIx $i 2>/dev/null; done` – Darren Cheng Mar 10 '14 at 19:46
  • Just added sudo `for i in `sudo gem list --no-versions`; do sudo gem uninstall -aIx $i; done` – sarat Jan 29 '15 at 16:10
  • Please mention `sudo` since OP mentioned system-wide `gem` in OS X. – Franklin Yu Jan 26 '17 at 07:27
  • Hey, I'm writing a guide on this topic. Has anyone on gem < 2.1.0 tried [this bash script](https://gist.github.com/stilist/256d6e1684f7e9d9f4e660655d1bab64) to work around the errors? – evan.bovie Dec 02 '21 at 00:03
58

You could also build out a new Gemfile and run bundle clean --force. This will remove all other gems that aren't included in the new Gemfile.

bswinnerton
  • 4,533
  • 8
  • 41
  • 56
31

A slighest different version, skipping the cut step, taking advantage of the '--no-version' option:

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

Since you are removing everything, I don't see the need for the 'I' option. Whenever the gem is removed, it's fine.

Thiago Ganzarolli
  • 1,161
  • 12
  • 17
14

First make sure you have at least gem version 2.1.0

gem update --system
gem --version
# 2.6.4

To uninstall simply run:

gem uninstall --all

You may need to use the sudo command:

sudo gem uninstall --all
typo
  • 1,041
  • 11
  • 15
11

Use either

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

or

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

Depending on what you want, you may need to execute both, because "gem list" and "sudo gem list" provide independent lists.

Do not mix a normal "gem list" with a sudo-ed "gem uninstall" nor the other way around otherwise you may end up uninstalling sudo-installed gems (former) or getting a lot of errors (latter).

aercolino
  • 2,193
  • 1
  • 22
  • 20
10

If you are using Rubygems version 2.1.0 or later, you can try: gem uninstall --all.

Edward
  • 3,429
  • 2
  • 27
  • 43
Alessandro
  • 643
  • 1
  • 7
  • 20
9

Rubygems >= 2.1.0

gem uninstall -aIx

If Terminal returns below error

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

Then write above command as below

sudo gem uninstall -aIx

And enter your mac os account password Done!!

Kirtikumar A.
  • 4,140
  • 43
  • 43
9

And for those of you who are here because you want to remove all gems with a certain prefix (ahem I'm looking at you aws-sdk!) you can run something like this:

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

Obviously put in your query instead of aws-sdk-. You need the -I in there to ignore dependencies.

Adopted form Ando's earlier answer

Trevor Elwell
  • 179
  • 2
  • 4
7

If you like doing it using ruby:

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

Cheers

Haris Krajina
  • 14,824
  • 12
  • 64
  • 81
  • I am getting an error with this: ERROR: While executing gem ... (Gem::CommandLineError) Please specify at least one gem name (e.g. gem build GEMNAME) – mbdev Mar 03 '13 at 21:19
  • 1
    @mbdev Fixed, hehe providing support to my answers on Stack Overflow :) – Haris Krajina Mar 04 '13 at 09:42
  • This is handy in that it works in Windows where the command shell is... not good. – AdamC Sep 02 '15 at 20:11
5

The only command helped me to cleanup all gems and ignores default gems, which can't be uninstalled

for x in `gem list --no-versions`; do gem uninstall $x -a -x -I; done
Attenzione
  • 833
  • 9
  • 12
3

I did that not too long ago (same poster-child RVM switcher situation):

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

Takes the list of all gems (incl. version stuff), cuts it to keep only the gem name, then uninstalls all versions of such gems.

The sudo is only useful if you had gems installed system-wide, and should not be included unless necessary.

Romain
  • 12,679
  • 3
  • 41
  • 54
2

When trying to remove gems installed as root, xargs seems to halt when it encounters an error trying to uninstall a default gem:

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


This won't work for everyone, but here's what I used instead:

sudo for gem (`gem list | cut -d" " -f1`); do gem uninstall $gem -aIx; done
Zaz
  • 46,476
  • 14
  • 84
  • 101
2
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 here is excluding default gems. All other gems will be uninstalled. You can also precede it with sudo in case you get permission issues.

moeabdol
  • 4,779
  • 6
  • 44
  • 43