ChatGPT解决这个技术问题 Extra ChatGPT

Uninstall all installed gems, in OSX?

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?

Nowadays this is unnecessary. RVM knows where to look for the gems after you switch to the right Ruby version.
yes Y | gem uninstall -a -I
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.
@NathanCrause Then it’s a bug in RVM and should be reported. I’m pretty sure this isn’t the intended behavior of RVM.
@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.

g
grizzthedj

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

Duh, you beat me to the speed :)
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"
gem list | cut -d" " -f1 | sudo xargs gem uninstall -Iax -worked for me
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)
@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
b
bswinnerton

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.


best answer because test-unit cannot be uninstalled and kills the process.
Yes, this is the best answer. I feel OP should choose this post 2.0.0.
This is certainly working for me and much more elegant than other versions
This is a great technique. Just what I needed.
T
Thiago Ganzarolli

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.


sudo shouldn't be necessary if the gems were installed by an ordinary user.
See my answer for a reason why I downvoted. I wanted to comment here but comments do not allow lines...
good, can remove a lot of gems, but something dosen`t it like bundle, rake, rvm
Very elegant but fails due to the inability to remove default gems. Suggest crftr's solution instead
t
typo

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

a
aercolino

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).


You are right, I edited my answer to exclude sudo. For both versions users can rely on your answer.
E
Edward

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


It should be 'gem' not 'gems'.
K
Kirtikumar A.

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!!


T
Trevor Elwell

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


H
Haris Krajina

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


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 Fixed, hehe providing support to my answers on Stack Overflow :)
This is handy in that it works in Windows where the command shell is... not good.
A
Attenzione

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

R
Romain

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.


Z
Zaz

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

m
moeabdol
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.


关注公众号,不定期副业成功案例分享
Follow WeChat

Success story sharing

Want to stay one step ahead of the latest teleworks?

Subscribe Now