Як видалити невикористані пакети MacPorts?


94

Щоразу, коли я встановлюю програму через MacPorts, вона отримує та встановлює безліч залежностей. Коли я видаляю програму, як змусити MacPorts рекурсивно видаляти всі невикористані залежності за допомогою неї?

Відповіді:


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БД порту за замовчуванням для нових установок; старі установки, оновлені до 1.9.x, продовжуватимуть використовувати flatформат 1 . Ви можете конвертувати систему 1.9.x flatу sqliteформат, оновивши до MacPorts 2.0 або змінивши portdbformatзначення в, /opt/local/etc/macports/macports.confа потім видавши команду порту як root (наприклад 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
Дякую. Це дуже корисно. Здається, що вам, можливо, доведеться кілька разів запускати лист ехо та видаляти листя назад до спини, щоб переконатися, що всі листя очищені. Я виконував обидві команди принаймні 4 рази, перш ніж відлуння повернеться порожнім результатом
Антоній,

6
Ви можете сказати щось на зразок while sudo port uninstall leaves; do :; doneавтоматизації цього.
Том Андерсон

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 (force). Це очевидно зламає утриманців. Не змушуйте видаляти порти, якщо ви не знаєте, що ви робите.

%% sudo port -f uninstall vile

Зверніть увагу на головне застереження в останньому абзаці. Залежності саме такі - залежності - і різні додатки можуть (потребуватимуть) вимагати однакових залежностей.


Я не думаю, що це відповідає на питання. ОП хоче видалити програму та речі, які вона вимагає, а не видалити програму та речі, які її вимагають.

2
@mankoff: ‑‑follow‑dependenciesпроти ‑‑follow‑dependents; цитований уривок описує і те, і інше, але лише перше стосується питання
Кріс Джонсен

3
Особисто я думаю, що ти чудово, що Філіп пояснює обидва параметри, тому ми повністю усвідомлюємо параметри та їх наслідки після видачі такої команди
Антоній

3

Команда для видалення порту та його залежних елементів:

sudo port uninstall foo --follow-dependents

Однак якщо у порту, який ви видаляєте, є залежні, він не буде видалений без -fпрапора (force).

Звичайно, слід почати з ознайомлення з посібником MacPorts, зокрема переглянувши посібник з видалення.


3

У каталозі дописів MacPorts також є сценарій, який називається port_cutleaves, який можна запустити, щоб видалити непотрібні залежності: 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залишається позаду.

Якщо ви використовуєте фінк, пакет debfoster призначений для очищення вашої системи та усунення невикористаних залежностей.

Debfoster допоможе вам позбутися від пакетів (наприклад, бібліотек), залишитись у вашій системі, коли програма, яка вимагала її, була видалена або оновлена ​​до версії, яка не має залежності.

Хоча debfosterдля MacPorts не буде працювати, схоже, є порти debfoster, наприклад portsfoster, хоча це, здається, припинено ...

Можливо, наразі не існує рішення для MacPorts.


Але чи не debfoster для файлів deb в системі Debian? Як використовувати його для портів MacPorts на Mac OS X?
hpy

Він був перенесений на OS X і MacPorts, і фінк базується на aptсистемі, яку використовує Debian. Я не використовую MacPorts, але я зробив це, fink install debfosterі він працював просто чудово для мене.

MacPorts не пов'язаний із aptсистемою та не використовує debфайли. Ідея MacPorts пов'язана з портами FreeBSD або NetBSD pkgsrc, але реалізація дуже інша.
Кріс Джонсен

1
ГАРАЗД. Дякуємо за виправлення. Незалежно від цього, дебфостер був перенесений, щоб добре працювати fink. Далі пошук показує , що він НЕ працює з MacPorts, але є клони, напр смportsfoster
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.