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

Posted

技术标签:

【中文标题】在 OSX 中卸载所有已安装的 gem?【英文标题】:Uninstall all installed gems, in OSX? 【发布时间】:2011-12-27 01:39:34 【问题描述】:

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

例如,我需要帮助一位朋友迁移他们的 Rails 开发机器以使用 RVM。由于他们之前一直在使用系统范围的gem,因此在处理多个项目时,他遇到了许多令人头疼的问题。 基本上,他是 RVM 皈依者的典型代表。

我怎样才能优雅地卸载他的 OSX 系统上的所有 gem?

【问题讨论】:

现在这是不必要的。切换到正确的 Ruby 版本后,RVM 知道在哪里寻找 gem。 yes Y | gem uninstall -a -I 只是给@FranklinYu 的一个简短说明-并非总是如此。我遇到过这样的情况,全局安装的 Nokogiri 副本似乎总是优先于 RVM gemset,而全局安装的副本必须被卸载。 @NathanCrause 那么这是 RVM 中的一个错误,应该报告。我很确定这不是 RVM 的预期行为。 @FranklinYu 你是对的,但是在解决这样的问题之前,仍然需要一种清除所有宝石的方法。我只是说它是“不必要的”,这在理想情况下是正确的,但是嘿,事情总是横向发展。 【参考方案1】:

Rubygems >= 2.1.0

gem uninstall -aIx

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

Rubgems

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

【讨论】:

呃,你的速度打败了我 :) 那么当然,你会想要重新安装一个健全的默认 gem 列表,对我来说是:“gem install bundler json minitest rake rdoc” 宝石列表 |剪切-d" "-f1 | sudo xargs gem uninstall -Iax - 为我工作 不起作用:ERROR: While executing gem ... (Gem::InstallError) gem "test-unit" cannot be uninstalled because it is a default gem (gem 2.0.3) @Anthony 虽然这有点危险,但您可以使用for i in `gem list --no-versions`; do gem uninstall -aIx $i 2>/dev/null; done 抑制错误【参考方案2】:

对于那些因为想要删除所有带有特定前缀的 gem(ahem 我在看你的 aws-sdk!)而来到这里的人,你可以运行如下代码:

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

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

采用安藤earlier answer

【讨论】:

你成就了我的一天:D【参考方案3】:
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

【讨论】:

【参考方案4】:

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

gem update --system
gem --version
# 2.6.4

要卸载,只需运行:

gem uninstall --all

您可能需要使用sudo 命令:

sudo gem uninstall --all

【讨论】:

【参考方案5】:

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

【讨论】:

最佳答案,因为无法卸载测试单元并终止进程。 是的,这是最好的答案。我觉得OP应该选择这个帖子2.0.0。 这当然对我有用,而且比其他版本更优雅 这是一项很棒的技术。正是我需要的。【参考方案6】:

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

【讨论】:

应该是“宝石”而不是“宝石”。【参考方案7】:

Rubygems >= 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】:

当尝试删除以 root 身份安装的 gems 时,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

【讨论】:

【参考方案9】:

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

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

【讨论】:

【参考方案10】:

如果你喜欢使用 ruby​​:

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 已修复,呵呵为我在 Stack Overflow 上的回答提供支持 :) 这很方便,因为它可以在命令 shell 不太好的 Windows 中工作。【参考方案11】:

最轻微的不同版本,跳过剪切步骤,利用“--no-version”选项:

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

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

【讨论】:

sudo 如果 gem 是由普通用户安装的,则不需要。 查看我的答案,了解我投反对票的原因。我想在这里发表评论,但 cmets 不允许行... 不错,可以移除很多宝石,但不能像 bundle、rake、rvm 这样的东西 非常优雅,但由于无法删除默认宝石而失败。建议crftr的解决方案【参考方案12】:

使用任一

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

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

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

不要将普通的“gem 列表”与 sudo 编辑的“gem 卸载”混为一谈,否则您最终可能会卸载 sudo 安装的 gem(前者)或出现很多错误(后者)。

【讨论】:

你是对的,我编辑了我的答案以排除 sudo。对于这两个版本,用户都可以信赖您的回答。【参考方案13】:

我不久前做过(同样的典型儿童 RVM 切换器情况):

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

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

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

【讨论】:

以上是关于在 OSX 中卸载所有已安装的 gem?的主要内容,如果未能解决你的问题,请参考以下文章

RVM:卸载 gemset 的所有 gem

Mac OSX上卸载Anaconda

如何在 OS X 10.9 中卸载多个 Xcode 实例

卸载旧版本的 Ruby gem

卸载 OpenCV 3 Mac OSX

CocoaPods的安装、使用(查找.安装) 及 CocoaPods卸载