OSX에 설치된 모든 gem을 제거 하시겠습니까?


177

이전의 모든 gem 설치를 되돌리고 제거하려는 경우가 있습니다.

예를 들어 친구가 RVM을 사용하도록 레일 개발 시스템을 마이그레이션하도록 지원해야했습니다. 이전에 시스템 전체를 사용 했었기 때문에 gem여러 프로젝트로 작업 할 때 많은 두통이 발생했습니다. 기본적으로 그는 RVM 변환의 포스터 자식이었습니다.

OSX 시스템에서 모든 gem을 우아하게 제거하려면 어떻게해야합니까?


1
오늘날 이것은 불필요합니다. RVM은 올바른 Ruby 버전으로 전환 한 후 보석을 찾을 위치를 알고 있습니다.
Franklin Yu

1
yes Y | gem uninstall -a -I
stopanko

@FranklinYu에 대한 간단한 참고 사항-항상 그런 것은 아닙니다. 전 세계적으로 설치된 Nokogiri 사본이 항상 RVM gemset보다 우선하는 것처럼 보이며 전역 을 제거 해야하는 경우 가있었습니다 .
Nathan Crause '

@NathanCrause 그렇다면 RVM의 버그이므로보고해야합니다. 이것이 RVM의 의도 된 동작이 아니라고 확신합니다.
Franklin Yu

@FranklinYu 당신 말이 맞지만, 그러한 문제가 해결 될 때까지 모든 보석을 제거 할 방법이 여전히 필요합니다. 나는 그것이 "불필요하다"는 점에 대해서만 언급하고 있었는데, 이상적인 상황에서는 사실 일 것이지만, 상황은 항상 옆으로 간다.
Nathan Crause 18

답변:


428

루비 젬> = 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
Duh, 당신은 속도로 나를 이겼습니다 :)
Romain

3
물론, 기본 보석 목록을 다시 설치하고 싶을 것입니다. "gem install bundler json minitest rake rdoc"
Wil Moore III

5
보석 목록 | 컷 -d ""-f1 | sudo xargs gem uninstall -Iax-나를 위해 일했다
lesyk

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 2016 년

1
테스트 단위를 제거 할 수없고 프로세스를 종료하기 때문에 최상의 답변입니다.
westonplatter

2
예, 이것이 가장 좋은 답변입니다. OP 가이 게시물 2.0.0을 선택해야한다고 생각합니다.
theTuxRacer

2
이것은 확실히 나에게 효과적이며 다른 버전보다 훨씬 우아합니다.
Crispen Smith

29

'--no-version'옵션을 활용하여 잘라 내기 단계를 건너 뛰는 가장 다른 버전

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

모든 것을 제거하기 때문에 'I'옵션이 필요하지 않습니다. 보석이 제거 될 때마다 괜찮습니다.


1
sudo일반 사용자가 gem을 설치 한 경우에는 필요하지 않습니다.
sampablokuper 2014 년

내가 다운 보트 한 이유에 대한 답변을 참조하십시오. 나는 여기에 댓글을 달고 싶었지만 댓글은 라인을 허용하지 않습니다 ...
aercolino

좋은 보석을 많이 제거 할 수 있지만, 번들, 레이크, RVM 같은 것이 dosen`t 일
coolesting

매우 우아하지만 기본 보석을 제거 할 수 없기 때문에 실패합니다. 대신 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

"gem list"와 "sudo gem list"는 독립적 인 목록을 제공하기 때문에 원하는 것에 따라 두 가지를 모두 실행해야 할 수도 있습니다.

일반적인 "gem list"를 sudo-ed "gem uninstall"과 섞거나 다른 방법으로 사용하지 마십시오. 그렇지 않으면 sudo-installed gem (이전)이 제거되거나 많은 오류가 발생합니다 (후기).


당신은 옳습니다, sudo를 제외하기 위해 내 대답을 편집했습니다. 두 버전 모두 사용자가 답을 신뢰할 수 있습니다.
Thiago Ganzarolli

9

Rubygems 버전 2.1.0 이상을 사용하는 경우 다음을 시도 할 수 있습니다 gem uninstall --all..


3
'gems'가 아닌 'gem'이어야합니다.
수집

6

루비를 사용하여 좋아한다면 :

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

건배


오류 : ERROR : gem을 실행하는 중 ... (Gem :: CommandLineError) 하나 이상의 gem 이름을 지정하십시오 (예 : gem build GEMNAME)
mbdev

1
@mbdev 수정 됨, 그는 스택 오버플로에 대한 답변을 지원합니다 :)
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

그리고 맥 OS 계정 암호를 입력하십시오!


5

그리고 당신은 특정 접두사로 모든 보석을 제거 할 때문에 여기 분들을 위해 ( 에헴 내가 AWS-SDK 당신을 찾고 있어요!) 당신이 뭔가를 실행할 수 있습니다 :

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

분명히 검색어 대신 검색어를 입력하십시오 aws-sdk-. -I종속성을 무시 하려면 안에 있어야합니다.

Ando의 이전 답변 채택


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

모든 gem 목록 (버전 항목 포함)을 가져 와서 gem 이름 만 유지하도록 잘라낸 다음 해당 gem의 모든 버전을 제거합니다.

이 기능 sudo은 시스템 전체에 gem을 설치 한 경우에만 유용하며 필요하지 않으면 포함하지 않아야합니다.


1

루트로 설치된 gem을 제거하려고 할 때, 기본 gem을 제거하는 중에 오류가 발생하면 xargs가 정지 한 것 같습니다 :

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권한 문제가 발생하는 경우에 우선 할 수도 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.