ถอนการติดตั้งพลอยที่ติดตั้งทั้งหมดใน OSX หรือไม่


177

มีอินสแตนซ์ที่ฉันต้องการเปลี่ยนกลับและถอนการติดตั้งการติดตั้งพลอยก่อนหน้านี้ทั้งหมด

ตัวอย่างเช่นฉันต้องการช่วยเพื่อนโยกย้ายเครื่องจักรการพัฒนารางของพวกเขาเพื่อใช้ RVM เนื่องจากก่อนหน้านี้พวกเขาใช้ระบบทั้งระบบgemเขาประสบกับอาการปวดหัวหลายอย่างเมื่อทำงานกับหลายโครงการ โดยพื้นฐานแล้วเขาเป็นลูกคนโตของผู้เปลี่ยนใจเลื่อมใส RVM

ฉันจะถอนการติดตั้งอัญมณีทั้งหมดอย่างหรูหราบนระบบ OSX ของเขาได้อย่างไร


1
ทุกวันนี้สิ่งนี้ไม่จำเป็น RVM รู้ตำแหน่งที่จะมองหาอัญมณีหลังจากคุณเปลี่ยนไปใช้เวอร์ชั่น Ruby ที่ถูกต้อง
Franklin Yu

1
yes Y | gem uninstall -a -I
stopanko

เพียงบันทึกย่อถึง @FranklinYu - นี่ไม่ใช่กรณีเสมอไป ผมเคยมีกรณีที่สำเนาติดตั้งทั่วโลกของ Nokogiri ดูเหมือนจะเสมอได้รับแบบอย่างมากกว่า gemset RVM และคนทั่วโลกมีการถอนการติดตั้ง
Nathan Crause

@NathanCrause จากนั้นเป็นข้อผิดพลาดใน RVM และควรรายงาน ฉันค่อนข้างแน่ใจว่านี่ไม่ใช่พฤติกรรมที่ตั้งใจของ RVM
Franklin Yu

@ FranklinYu คุณถูกต้อง แต่จนกว่าปัญหาดังกล่าวจะได้รับการแก้ไขจะยังคงมีความต้องการวิธีกำจัดอัญมณีทั้งหมด ฉันแค่อ้างถึงจุดที่มันเป็น "ไม่จำเป็น" ซึ่งจะเป็นจริงในสถานการณ์ในอุดมคติ แต่เดี๋ยวก่อนสิ่งที่ไปด้านข้างตลอดเวลา
Nathan Crause

คำตอบ:


428

Rubygems> = 2.1.0

gem uninstall -aIx

aลบเวอร์ชันทั้งหมดโดย
Iไม่สนใจการพึ่งพา
xรวมถึง executables

Rubgems <2.1.0

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

1
ดุจคุณชนะฉันกับความเร็ว :)
Romain

3
แน่นอนว่าคุณจะต้องติดตั้งรายชื่ออัญมณีเริ่มต้นใหม่ซึ่งสำหรับฉันคือ: "gem install bundler json minitest rake rdoc"
วิลมัวร์ III

5
รายการอัญมณี ตัด -d "" -f1 | sudo xargs อัญมณีถอนการติดตั้ง -Iax -worked สำหรับฉัน
Lesyk

5
ไม่ทำงาน: ERROR: While executing gem ... (Gem::InstallError) gem "test-unit" cannot be uninstalled because it is a default 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

2
นี่ใช้งานได้สำหรับฉันและสวยงามกว่ารุ่นอื่น ๆ มาก
Crispen Smith

29

เวอร์ชันที่ต่างกันมากที่สุดและข้ามขั้นตอนการตัดโดยใช้ประโยชน์จากตัวเลือก '- ไม่มีรุ่น':

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

เมื่อคุณลบทุกอย่างออกฉันไม่เห็นความต้องการตัวเลือก 'ฉัน' เมื่อใดก็ตามที่อัญมณีถูกลบมันก็ดี


1
sudoไม่ควรจำเป็นถ้าผู้ใช้ทั่วไปติดตั้งอัญมณี
sampablokuper

ดูคำตอบของฉันด้วยเหตุผลว่าทำไมฉันลงคะแนน ฉันต้องการแสดงความคิดเห็นที่นี่ แต่ความคิดเห็นไม่อนุญาตให้ใช้บรรทัด ...
aercolino

ดีสามารถลบอัญมณีได้มากมาย แต่มีบางสิ่งที่ dosen`t เช่นมัด, คราด, rvm
เด็ดสุด

สวยงามมาก แต่ล้มเหลวเนื่องจากไม่สามารถลบอัญมณีเริ่มต้นได้ แนะนำวิธีแก้ปัญหาของ 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" ขึ้นอยู่กับสิ่งที่คุณต้องการ

อย่าผสม "รายการอัญมณี" ปกติกับ sudo-ed "gem ถอนการติดตั้ง" หรือวิธีอื่น ๆ มิฉะนั้นคุณอาจสิ้นสุดการถอนการติดตั้งอัญมณีที่ติดตั้ง sudo (เดิม) หรือได้รับข้อผิดพลาดมากมาย (หลัง)


คุณถูกต้องฉันแก้ไขคำตอบของฉันเพื่อไม่รวม sudo สำหรับทั้งสองเวอร์ชันผู้ใช้สามารถพึ่งพาคำตอบของคุณ
Thiago Ganzarolli

9

หากคุณกำลังใช้ RubyGems เวอร์ชัน 2.1.0 gem uninstall --allหรือในภายหลังคุณสามารถลอง:


3
ควรเป็น 'gem' ไม่ใช่ 'gem'
สะสม

6

ถ้าคุณชอบทำโดยใช้ทับทิม:

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

ไชโย


ฉันได้รับข้อผิดพลาดกับสิ่งนี้: ข้อผิดพลาด: ขณะดำเนินการ gem ... (Gem :: CommandLineError) โปรดระบุชื่ออัญมณีอย่างน้อยหนึ่งชื่อ (เช่น gem build GEMNAME)
mbdev

1
@mbdev คง hehe ให้การสนับสนุนไปสู่คำตอบของฉันในกองมากเกิน :)
Haris จินา

สิ่งนี้มีประโยชน์ในการทำงานใน Windows ที่เชลล์คำสั่งนั้น ... ไม่ดี
AdamC

5

Rubygems> = 2.1.0

gem uninstall -aIx

ถ้า Terminal คืนด้านล่างข้อผิดพลาด

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ในการเพิกเฉยต่อการพึ่งพา

นำแบบฟอร์มคำตอบก่อนหน้าของ Ando มาใช้


4

คำสั่งเดียวช่วยให้ฉันล้างอัญมณีทั้งหมดและไม่สนใจอัญมณีเริ่มต้นซึ่งไม่สามารถถอนการติดตั้งได้

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นี้จะมีประโยชน์ก็ต่อเมื่อคุณมีการติดตั้งระบบทั่วทั้งอัญมณีและไม่ควรรวมไว้ในกรณีที่จำเป็น


1

เมื่อพยายามลบพลอยที่ติดตั้งเป็นรูทดูเหมือนว่า 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 ที่นี่ไม่รวมอัญมณีเริ่มต้น พลอยอื่น ๆ ทั้งหมดจะถูกถอนการติดตั้ง คุณสามารถนำหน้าด้วยsudoในกรณีที่คุณได้รับปัญหาการอนุญาต

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.