วิธีลบแพ็กเกจ MacPorts ที่ไม่ได้ใช้ออกไป


94

เมื่อใดก็ตามที่ฉันติดตั้งโปรแกรมผ่าน MacPort มันจะได้รับและติดตั้งการอ้างอิงจำนวนมาก เมื่อฉันถอนการติดตั้งโปรแกรมดังกล่าวฉันจะทำให้ MacPort ลบการอ้างอิงที่ไม่ได้ใช้ทั้งหมดซ้ำด้วยการทำซ้ำได้อย่างไร

คำตอบ:


105

เพื่อหลีกเลี่ยงการตัดใบไม้ที่อาจเป็นสิ่งที่คุณร้องขอคุณควรติดตั้งport_cutleavesแพคเกจจากนั้นเรียกใช้sudo port_cutleaves https://guide.macports.org/#using.common-tasks.keeplean


MacPorts 1.9.0 เพิ่มsqlite portdbformatและMacPorts 2.0.0 ลดลงเก่าflatรูปแบบ sqliteรูปแบบพอร์ต DB เป็นค่าเริ่มต้นสำหรับการติดตั้งใหม่ การติดตั้งเก่าที่ได้ปรับปรุงให้ 1.9.x จะยังคงใช้flatรูปแบบที่1 คุณสามารถแปลงflatระบบ1.9.x เป็นsqliteรูปแบบโดยการอัพเกรดเป็น MacPorts 2.0 หรือโดยการเปลี่ยนportdbformatค่าใน /opt/local/etc/macports/macports.confและจากนั้นออกคำสั่งพอร์ตเป็นราก (เช่นsudo port installed)

หนึ่งในคุณสมบัติของรูปแบบใหม่คือการติดตามการติดตั้งพอร์ต "ที่ร้องขอ" และ "ไม่ได้รับการร้องขอ" พอร์ตที่ไม่ได้รับการร้องขอคือพอร์ตที่ติดตั้งเพียงเพราะพอร์ตอื่น ๆ ขึ้นอยู่กับพอร์ตนั้น leavesหลอก PORTNAME ขยายไปยังทุกพอร์ตที่ไม่ได้ร้องขอซึ่งไม่มีการติดตั้งพอร์ตอื่น ๆ ขึ้นอยู่กับ คุณสามารถใช้สิ่งนี้เพื่อ“ ล้างข้อมูล” พอร์ตที่ไม่จำเป็นแม้ว่าคุณจะไม่ได้ถอนการติดตั้งพวกเขาด้วยsudo port uninstall --follow-dependencies portname(ซึ่งจะทำสิ่งที่คุณต้องการ


คุณควรตรวจสอบใบไม้ที่มีอยู่ก่อนที่จะถอนการติดตั้งใด ๆ

port echo leaves

บางใบที่พบบ่อย ( automake, gperf, libtool, pkgconfig) เป็นเวลาสร้างการอ้างอิงของพอร์ตทั่วไปดังนั้นคุณอาจต้องการที่จะ“คำขอ” พวกเขา ( sudo port setrequested port1 port2 port3 …) เพื่อหลีกเลี่ยงการถอนการติดตั้งพวกเขาเพียงแค่ให้มีการติดตั้งพวกเขาในภายหลัง

คุณสามารถถอนการติดตั้งใบไม้ที่เหลืออยู่ได้อย่างง่ายดาย:

sudo port uninstall leaves

หมายเหตุ: ก่อนที่จะตัดใบทิ้งของคุณคุณอาจต้องการถอนการติดตั้งพอร์ตเก่าที่ไม่“ ใช้งาน” อีกต่อไป สิ่งนี้อาจแสดงให้เห็นว่ามีใบไม้เหลืออีกเล็กน้อย (เช่นพอร์ตที่ขึ้นต่อกันของพอร์ตที่ติดตั้ง แต่ไม่ได้ใช้งาน):

sudo port uninstall inactive

มีหลายส่วนในคู่มือ MacPortsที่อธิบายถึงขั้นตอนการใช้leavesเพื่อถอนการติดตั้งพอร์ตที่ไม่จำเป็น


11
ขอบคุณ สิ่งนี้มีประโยชน์มาก ดูเหมือนว่าคุณอาจต้องเรียกใช้ echo leaves และถอนการติดตั้ง leaves back to back หลาย ๆ ครั้งเพื่อให้แน่ใจว่ามีการล้างใบไม้ทั้งหมด ฉันรันทั้งสองคำสั่งอย่างน้อย 4 ครั้งก่อนที่เสียงสะท้อนจะให้ผลลัพธ์ที่ว่างเปล่า
แอนโทนี

6
คุณสามารถพูดบางสิ่งบางอย่างwhile sudo port uninstall leaves; do :; doneโดยอัตโนมัติ
Tom Anderson

2
@ChrisJohnsen sudo port uninstall --follow-dependents portnameไม่ถูกต้องเนื่องจาก--follow-dependentsจะ "ถอนการติดตั้งพอร์ตซ้ำทั้งหมดที่ขึ้นอยู่กับพอร์ตที่ระบุ" ตัวเลือกที่ถูกต้องที่นี่คือ--follow-dependenciesซึ่งจะ "ถอนการติดตั้งซ้ำพอร์ตทั้งหมดที่พอร์ตที่ระบุขึ้นอยู่กับนี้จะไม่ถอนการติดตั้งการพึ่งพาที่มีการทำเครื่องหมายตามที่ร้องขอหรือที่มีผู้ติดตามอื่น ๆ "
TachyonVortex

8

จากเอกสาร :

การดำเนินการถอนการติดตั้งจะถอนการติดตั้งพอร์ตที่ติดตั้ง

%% sudo port uninstall vile Note

หากต้องการถอนการติดตั้งพอร์ตซ้ำ ๆ ที่พอร์ตที่กำหนดไว้ให้ใช้‑‑follow‑dependenciesแฟล็ก สิ่งนี้จะไม่ถอนการติดตั้งการอ้างอิงที่ทำเครื่องหมายตามที่ร้องขอหรือที่มีผู้ติดตามอื่น ๆ

‑‑follow‑dependents flagการซ้ำถอนการติดตั้งพอร์ตทั้งหมดที่ขึ้นอยู่กับพอร์ตที่กำหนดก่อนที่จะถอนการติดตั้งพอร์ตของตัวเองใช้

หากพอร์ตเป็นการพึ่งพาของพอร์ตที่ติดตั้งอื่นการถอนการติดตั้งจะไม่ลบเว้นแต่คุณจะลบพอร์ตที่ขึ้นต่อกันก่อน ในการลบล้างพฤติกรรมนี้ให้ใช้สวิตช์ -f (บังคับ) เห็นได้ชัดว่าจะทำลายผู้อยู่ในอุปการะ อย่าบังคับให้ถอนการติดตั้งพอร์ตเว้นแต่คุณจะรู้ว่ากำลังทำอะไรอยู่

%% sudo port -f uninstall vile

หมายเหตุข้อแม้ที่สำคัญในวรรคสุดท้าย การพึ่งพานั้นแน่นอนว่า - การพึ่งพา - และแอพที่ต่างกันสามารถ (จะ) ต้องการการพึ่งพาเหมือนกัน


ฉันไม่คิดว่านี่จะตอบคำถามได้ OP ต้องการลบโปรแกรมและสิ่งที่ต้องการไม่ใช่ลบโปรแกรมและสิ่งที่ต้องการ

2
@mankoff: ‑‑follow‑dependenciesvs. ‑‑follow‑dependents; ข้อความที่ยกมาอธิบายทั้งสองอย่าง แต่เฉพาะคำถามแรกเท่านั้นที่ใช้กับคำถาม
Chris Johnsen

3
โดยส่วนตัวแล้วฉันคิดว่า ti นั้นยอดเยี่ยมที่ฟิลิปอธิบายพารามิเตอร์ทั้งสองดังนั้นเราจึงตระหนักถึงพารามิเตอร์และความหมายของพวกเขาเมื่อออกคำสั่งเช่นนี้
Antony

3

คำสั่งเพื่อลบพอร์ตและผู้ติดตามคือ:

sudo port uninstall foo --follow-dependents

อย่างไรก็ตามหากพอร์ตที่คุณถอนการติดตั้งมีผู้ติดตามอยู่จะไม่ถอนการติดตั้งหากไม่มีการ-fตั้งค่าสถานะ (บังคับ)

แน่นอนคุณควรเริ่มจากการอ่านคู่มือ MacPortsโดยเฉพาะดูในส่วนคำแนะนำในการถอนการติดตั้ง


3

นอกจากนี้ยังมีสคริปต์ในไดเรกทอรี contrib เรียก port_cutleaves MacPorts' คุณสามารถเรียกใช้ในการลบการอ้างอิงที่ไม่จำเป็น A: http://trac.macports.org/browser/contrib/ มันจะถามคุณถึงพอร์ตที่ต้องถอนการติดตั้งแต่ละพอร์ตและอนุญาตให้เก็บบางพอร์ตได้หากคุณต้องการ


2

ฉันได้เขียนสคริปต์บางอย่างเพื่อทำการล้างพอร์ตอัตโนมัติ: https://github.com/vasi/macports-tools

สคริปต์ 'macportsfoster' จะแสดงรายการของพอร์ตทั้งหมดที่ไม่ต้องการในรายการที่ร้องขอโดยสั่งให้ 'พอร์ตปิดใช้งาน $ (macportsfoster)' จะลบพอร์ตทั้งหมดในภาพเดียว


1

ฉันคิดว่าคำตอบอื่น ๆ และ--follow-dependentsธงไม่ทำสิ่งที่คุณต้องการ หากคุณติดตั้งAและAจำเป็นต้องBขอบคุณระบบจัดการแพกเกจที่ยอดเยี่ยมBจะถูกติดตั้งให้คุณ คุณสามารถถอนการติดตั้งBและธงจะรู้และลบ--follow-dependents Aแต่ถ้าคุณถอนการติดตั้งAซึ่งมีโอกาสมากขึ้นเพราะAสิ่งที่คุณติดตั้งด้วยตนเองในสถานที่แรก? ในกรณีนี้Bถูกทิ้งไว้ข้างหลัง

หากคุณใช้ fink แพคเกจdebfosterได้รับการออกแบบเพื่อล้างระบบของคุณและลบการอ้างอิงที่ไม่ได้ใช้

Debfoster จะช่วยคุณกำจัดแพ็กเกจ (ตัวอย่างไลบรารี) ทิ้งไว้ในระบบของคุณเมื่อโปรแกรมที่ต้องการให้ลบออกหรืออัปเกรดเป็นเวอร์ชันที่ไม่มีการพึ่งพา

ในขณะที่debfosterจะไม่ทำงานสำหรับ MacPorts มีดูเหมือนจะเป็นพอร์ตของdebfosterตัวอย่างเช่นportsfosterแม้ว่ามันจะดูเหมือนว่าจะถูกยกเลิก ...

อาจไม่มีวิธีแก้ปัญหาสำหรับ MacPorts อยู่ในขณะนี้


แต่ไม่ใช่ debfoster สำหรับไฟล์ deb บนระบบที่ใช้ Debian? ฉันจะใช้สำหรับพอร์ต MacPorts บน Mac OS X ได้อย่างไร
hpy

มันได้รับการแจ้งความไปยัง OS X และ MacPorts และ fink นั้นใช้aptระบบที่ Debian ใช้ ฉันไม่ได้ใช้ MacPorts แต่ฉันทำfink install debfosterและมันใช้ได้ดีสำหรับฉัน

MacPorts ไม่เกี่ยวข้องกับaptระบบและไม่ใช้debไฟล์ แนวคิดของ MacPorts เกี่ยวข้องกับพอร์ต FreeBSD หรือ NetBSD pkgsrc แต่การนำไปใช้นั้นแตกต่างกันมาก
Chris Johnsen

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