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

时间:2011-11-11 14:16:49

标签: ruby rubygems

有些情况下我想恢复和卸载之前的所有gem安装。

例如,我需要帮助朋友迁移他们的rails开发机器以使用RVM。正如他们以前使用系统范围的gem一样,他在处理多个项目时遇到了许多麻烦。 基本上,他是RVM转换的典型代表。

如何优雅地卸载其OSX系统上的所有宝石?

13 个答案:

答案 0 :(得分:390)

Rubygems> = 2.1.0

gem uninstall -aIx

a删除所有版本 I忽略了依赖关系 x包含可执行文件

Rubgems< 2.1.0

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

答案 1 :(得分:42)

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

答案 2 :(得分:27)

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

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

由于您要删除所有内容,因此我认为不需要“我”选项。每当宝石被移除时,都没关系。

答案 3 :(得分:9)

使用

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

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

根据您的需要,您可能需要执行两者,因为“gem list”和“sudo gem list”提供了独立的列表。

不要将普通的“宝石列表”与sudo-ed“gem uninstall”混合使用,否则你可能最终卸载sudo-installed gem(前者)或者遇到很多错误(后者)。< / p>

答案 4 :(得分:8)

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

答案 5 :(得分:8)

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

gem update --system
gem --version
# 2.6.4

要卸载,只需运行:

gem uninstall --all

您可能需要使用sudo命令:

sudo gem uninstall --all

答案 6 :(得分:5)

如果您喜欢使用ruby:

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

干杯

答案 7 :(得分:3)

Rubygems&gt; = 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帐户密码 完成!!

答案 8 :(得分:2)

唯一的命令帮助我清除了所有宝石并忽略了无法卸载的默认宝石

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

答案 9 :(得分:2)

对于那些在这里的人,因为你想删除所有具有特定前缀的宝石( ahem 我看着你的aws-sdk!)你可以运行这样的东西:

from conjugate_prior import BetaBinomial
prior_model = BetaBinomial(1,1) # Uninformative prior
updated_model = prior_model.update(heads, tails)
credible_interval = updated_model.posterior(0.45, 0.55)
print ("There's {p:.2f}% chance that the coin is fair".format(p=credible_interval*100))

显然是在您的查询中而不是gem list --no-version | grep "aws-sdk-" | xargs gem uninstall -aIx 。你需要aws-sdk-来忽略依赖关系。

采用表格Ando的earlier answer

答案 10 :(得分:1)

我不久前就这样做了(同样的海报儿童RVM切换器情况):

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

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

sudo仅在您在系统范围内安装了宝石时才有用,除非必要,否则不应包括。

答案 11 :(得分:0)

当尝试删除以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

答案 12 :(得分:0)

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这里排除默认宝石。所有其他宝石将被卸载。如果您收到权限问题,也可以在sudo之前加上它。