在 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?的主要内容,如果未能解决你的问题,请参考以下文章