เมื่อใดก็ตามที่ฉันติดตั้งโปรแกรมผ่าน MacPort มันจะได้รับและติดตั้งการอ้างอิงจำนวนมาก เมื่อฉันถอนการติดตั้งโปรแกรมดังกล่าวฉันจะทำให้ MacPort ลบการอ้างอิงที่ไม่ได้ใช้ทั้งหมดซ้ำด้วยการทำซ้ำได้อย่างไร
เมื่อใดก็ตามที่ฉันติดตั้งโปรแกรมผ่าน MacPort มันจะได้รับและติดตั้งการอ้างอิงจำนวนมาก เมื่อฉันถอนการติดตั้งโปรแกรมดังกล่าวฉันจะทำให้ MacPort ลบการอ้างอิงที่ไม่ได้ใช้ทั้งหมดซ้ำด้วยการทำซ้ำได้อย่างไร
คำตอบ:
เพื่อหลีกเลี่ยงการตัดใบไม้ที่อาจเป็นสิ่งที่คุณร้องขอคุณควรติดตั้ง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เพื่อถอนการติดตั้งพอร์ตที่ไม่จำเป็น
while sudo port uninstall leaves; do :; doneโดยอัตโนมัติ
sudo port uninstall --follow-dependents portnameไม่ถูกต้องเนื่องจาก--follow-dependentsจะ "ถอนการติดตั้งพอร์ตซ้ำทั้งหมดที่ขึ้นอยู่กับพอร์ตที่ระบุ" ตัวเลือกที่ถูกต้องที่นี่คือ--follow-dependenciesซึ่งจะ "ถอนการติดตั้งซ้ำพอร์ตทั้งหมดที่พอร์ตที่ระบุขึ้นอยู่กับนี้จะไม่ถอนการติดตั้งการพึ่งพาที่มีการทำเครื่องหมายตามที่ร้องขอหรือที่มีผู้ติดตามอื่น ๆ "
การดำเนินการถอนการติดตั้งจะถอนการติดตั้งพอร์ตที่ติดตั้ง
%% sudo port uninstall vile Noteหากต้องการถอนการติดตั้งพอร์ตซ้ำ ๆ ที่พอร์ตที่กำหนดไว้ให้ใช้
‑‑follow‑dependenciesแฟล็ก สิ่งนี้จะไม่ถอนการติดตั้งการอ้างอิงที่ทำเครื่องหมายตามที่ร้องขอหรือที่มีผู้ติดตามอื่น ๆ
‑‑follow‑dependents flagการซ้ำถอนการติดตั้งพอร์ตทั้งหมดที่ขึ้นอยู่กับพอร์ตที่กำหนดก่อนที่จะถอนการติดตั้งพอร์ตของตัวเองใช้หากพอร์ตเป็นการพึ่งพาของพอร์ตที่ติดตั้งอื่นการถอนการติดตั้งจะไม่ลบเว้นแต่คุณจะลบพอร์ตที่ขึ้นต่อกันก่อน ในการลบล้างพฤติกรรมนี้ให้ใช้สวิตช์ -f (บังคับ) เห็นได้ชัดว่าจะทำลายผู้อยู่ในอุปการะ อย่าบังคับให้ถอนการติดตั้งพอร์ตเว้นแต่คุณจะรู้ว่ากำลังทำอะไรอยู่
%% sudo port -f uninstall vile
หมายเหตุข้อแม้ที่สำคัญในวรรคสุดท้าย การพึ่งพานั้นแน่นอนว่า - การพึ่งพา - และแอพที่ต่างกันสามารถ (จะ) ต้องการการพึ่งพาเหมือนกัน
‑‑follow‑dependenciesvs. ‑‑follow‑dependents; ข้อความที่ยกมาอธิบายทั้งสองอย่าง แต่เฉพาะคำถามแรกเท่านั้นที่ใช้กับคำถาม
คำสั่งเพื่อลบพอร์ตและผู้ติดตามคือ:
sudo port uninstall foo --follow-dependents
อย่างไรก็ตามหากพอร์ตที่คุณถอนการติดตั้งมีผู้ติดตามอยู่จะไม่ถอนการติดตั้งหากไม่มีการ-fตั้งค่าสถานะ (บังคับ)
แน่นอนคุณควรเริ่มจากการอ่านคู่มือ MacPortsโดยเฉพาะดูในส่วนคำแนะนำในการถอนการติดตั้ง
ฉันได้เขียนสคริปต์บางอย่างเพื่อทำการล้างพอร์ตอัตโนมัติ: https://github.com/vasi/macports-tools
สคริปต์ 'macportsfoster' จะแสดงรายการของพอร์ตทั้งหมดที่ไม่ต้องการในรายการที่ร้องขอโดยสั่งให้ 'พอร์ตปิดใช้งาน $ (macportsfoster)' จะลบพอร์ตทั้งหมดในภาพเดียว
ฉันคิดว่าคำตอบอื่น ๆ และ--follow-dependentsธงไม่ทำสิ่งที่คุณต้องการ หากคุณติดตั้งAและAจำเป็นต้องBขอบคุณระบบจัดการแพกเกจที่ยอดเยี่ยมBจะถูกติดตั้งให้คุณ คุณสามารถถอนการติดตั้งBและธงจะรู้และลบ--follow-dependents Aแต่ถ้าคุณถอนการติดตั้งAซึ่งมีโอกาสมากขึ้นเพราะAสิ่งที่คุณติดตั้งด้วยตนเองในสถานที่แรก? ในกรณีนี้Bถูกทิ้งไว้ข้างหลัง
หากคุณใช้ fink แพคเกจdebfosterได้รับการออกแบบเพื่อล้างระบบของคุณและลบการอ้างอิงที่ไม่ได้ใช้
Debfoster จะช่วยคุณกำจัดแพ็กเกจ (ตัวอย่างไลบรารี) ทิ้งไว้ในระบบของคุณเมื่อโปรแกรมที่ต้องการให้ลบออกหรืออัปเกรดเป็นเวอร์ชันที่ไม่มีการพึ่งพา
ในขณะที่debfosterจะไม่ทำงานสำหรับ MacPorts มีดูเหมือนจะเป็นพอร์ตของdebfosterตัวอย่างเช่นportsfosterแม้ว่ามันจะดูเหมือนว่าจะถูกยกเลิก ...
อาจไม่มีวิธีแก้ปัญหาสำหรับ MacPorts อยู่ในขณะนี้
aptระบบที่ Debian ใช้ ฉันไม่ได้ใช้ MacPorts แต่ฉันทำfink install debfosterและมันใช้ได้ดีสำหรับฉัน
aptระบบและไม่ใช้debไฟล์ แนวคิดของ MacPorts เกี่ยวข้องกับพอร์ต FreeBSD หรือ NetBSD pkgsrc แต่การนำไปใช้นั้นแตกต่างกันมาก