在OSX中卸载所有已安装的gem?


177

在某些情况下,我想还原并卸载所有以前的gem安装。

例如,我需要帮助一个朋友迁移他们的Rails开发机器以使用RVM。由于他们以前在整个系统中使用过gem,所以在处理多个项目时,他遇到了许多麻烦。 本质上,他是RVM转换的后代。

如何优雅地卸载他的OSX系统上的所有gem?


1
如今,这是不必要的。切换到正确的Ruby版本后,RVM知道在哪里寻找宝石。
富兰克林于

1
yes Y | gem uninstall -a -I
stopanko

只是对@FranklinYu的快速说明-并非总是如此。我有一个地方安装了全球的引入nokogiri副本似乎总是采取先例在RVM宝石的情况下,以及全球一个不得不卸载。
内森·克劳斯

@NathanCrause这是RVM中的错误,应该报告。我很确定这不是RVM的预期行为。
富兰克林于

@FranklinYu,您是对的,但是直到解决了此类问题,仍然需要一种清除所有宝石的方法。我只是在说它是“不必要的”,这在理想情况下是正确的,但是嘿,事情总是无时无刻不在发生。
内森·克劳斯

Answers:


427

红宝石> = 2.1.0

gem uninstall -aIx

a删除所有版本,
I忽略依赖项,
x包括可执行文件

宝石<2.1.0

for i in `gem list --no-versions`; do gem uninstall -aIx $i; done

1
h,你击败了我:)
罗曼(Romain)

3
然后,当然,您会想要重新安装一个默认的宝石列表,对我来说是这样:“ gem install bundler json minitest rake rdoc”
Wil Moore III,

5
宝石清单| 切-d“” -f1 | sudo xargs gem卸载-Iax-为我工作
lesyk 2012年

5
不起作用: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尽管这有点危险,但您可以通过for i in `gem list --no-versions`; do gem uninstall -aIx $i 2>/dev/null; done
Darren Cheng

46

您还可以构建一个新的Gemfile并运行bundle clean --force。这将删除新Gemfile中未包含的所有其他宝石。


3
这非常有用:)
user1190286

1
最佳答案,因为无法卸载测试单元并杀死进程。
westonplatter

2
是的,这是最好的答案。我认为OP应该选择此帖子2.0.0。
theTuxRacer 2014年

2
这肯定对我
有用,

29

最小的版本,跳过剪切步骤,利用'--no-version'选项:

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

由于您要删除所有内容,因此我看不到需要“ I”选项。只要将宝石移除,就可以了。


1
sudo如果宝石是由普通用户安装的,则没有必要。
sampablokuper 2012年

请参阅我的回答,以了解我为什么投票。我想在这里发表评论,但评论不允许在线...
aercolino 2012年

很好,可以去除很多宝石,但是像捆包,耙子,rvm之类的东西
最酷的2014年

非常优雅,但由于无法删除默认宝石而失败。建议使用crftr的解决方案
Freedom_Ben

11

首先,请确保您至少有gem版本2.1.0

gem update --system
gem --version
# 2.6.4

要卸载,只需运行:

gem uninstall --all

您可能需要使用以下sudo命令:

sudo gem uninstall --all

10

使用任一

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

要么

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

根据您的需要,您可能需要同时执行这两个操作,因为“宝石列表”和“ sudo宝石列表”提供了独立的列表。

不要将普通的“ gem列表”与sudo-ed的“ gem卸载”混合使用,也不要将其混在一起,否则可能会导致卸载sudo安装的gems(以前)或出现很多错误(后期)。


没错,我编辑了答案以排除sudo。对于这两个版本,用户都可以依靠您的答案。
Thiago Ganzarolli 2012年

9

如果您使用的是Rubygems 2.1.0或更高版本,则可以尝试:gem uninstall --all


3
它应该是“宝石”而不是“宝石”。
2016年

6

如果您喜欢使用红宝石:

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

干杯


我收到以下错误消息:错误:执行gem ...(Gem :: CommandLineError)时,请至少指定一个gem名称(例如gem build GEMNAME)
mbdev

1
@mbdev已修复,嘿嘿为我对Stack Overflow的回答提供了支持:)
Haris Krajina

这很方便,因为它可以在Windows中使用命令外壳程序...不好。
AdamC

5

红宝石> = 2.1.0

gem uninstall -aIx

如果终端返回错误以下

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

然后如下写上面的命令

sudo gem uninstall -aIx

然后输入您的Mac OS帐户密码!


5

对于那些因为要删除所有带有特定前缀的宝石而出现在这里的人(哎呀,我在看你aws-sdk!),您可以运行以下命令:

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

显然在您的查询中,而不是aws-sdk-。您需要-I在其中忽略依赖项。

通过安藤的早期答案


4

唯一的命令可以帮助我清理所有gem,并忽略无法卸载的默认gem

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

2

我不久前做了(相同的子海报RVM切换器情况):

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

获取所有宝石的列表(包括版本信息),将其切割为仅保留宝石名称,然后卸载此类宝石的所有版本。

sudo仅当您在系统范围内安装了gems时,此选项才有用,除非有必要,否则不应将其包括在内。


1

尝试删除以root用户身份安装的gem时,xargs在遇到尝试卸载默认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


这并非对每个人都适用,但是这是我使用的:

sudo for gem (`gem list | cut -d" " -f1`); do gem uninstall $gem -aIx; done

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不包括默认的gem。所有其他宝石将被卸载。如果sudo遇到权限问题,也可以在此之前。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.