Відповіді:
Щоб уникнути випадкового обрізання листя, яке може бути запитом, вам слід встановити 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для видалення непотрібних портів.
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 (force). Це очевидно зламає утриманців. Не змушуйте видаляти порти, якщо ви не знаєте, що ви робите.
%% sudo port -f uninstall vile
Зверніть увагу на головне застереження в останньому абзаці. Залежності саме такі - залежності - і різні додатки можуть (потребуватимуть) вимагати однакових залежностей.
‑‑follow‑dependenciesпроти ‑‑follow‑dependents; цитований уривок описує і те, і інше, але лише перше стосується питання
Команда для видалення порту та його залежних елементів:
sudo port uninstall foo --follow-dependents
Однак якщо у порту, який ви видаляєте, є залежні, він не буде видалений без -fпрапора (force).
Звичайно, слід почати з ознайомлення з посібником MacPorts, зокрема переглянувши посібник з видалення.
У каталозі дописів MacPorts також є сценарій, який називається port_cutleaves, який можна запустити, щоб видалити непотрібні залежності: http://trac.macports.org/browser/contrib/ . Він попросить вас для кожного видаленого порту та дозволяє зберегти його, якщо ви хочете.
Я написав кілька сценаріїв для автоматичного очищення портів: https://github.com/vasi/macports-tools
Сценарій 'macportsfoster' виведе список усіх портів, які не вимагають нічого в запитуваному списку, впорядкований таким чином, що 'порт деактивує $ (macportsfoster)' видалить їх усіх за один кадр.
Я думаю, що інші відповіді та --follow-dependentsпрапор не роблять того, що ти хочеш. Якщо ви встановите Aта Aвимагаєте B, то завдяки чудовим системам управління пакетами Bбуде встановлено для вас. Ви можете видалити, Bі --follow-dependentsпрапор буде відомий та видалений A. Але що робити, якщо ви видалите A, що швидше за все, адже Aце в першу чергу встановлено вручну? У цьому випадку Bзалишається позаду.
Якщо ви використовуєте фінк, пакет debfoster призначений для очищення вашої системи та усунення невикористаних залежностей.
Debfoster допоможе вам позбутися від пакетів (наприклад, бібліотек), залишитись у вашій системі, коли програма, яка вимагала її, була видалена або оновлена до версії, яка не має залежності.
Хоча debfosterдля MacPorts не буде працювати, схоже, є порти debfoster, наприклад portsfoster, хоча це, здається, припинено ...
Можливо, наразі не існує рішення для MacPorts.
aptсистемі, яку використовує Debian. Я не використовую MacPorts, але я зробив це, fink install debfosterі він працював просто чудово для мене.
aptсистемою та не використовує debфайли. Ідея MacPorts пов'язана з портами FreeBSD або NetBSD pkgsrc, але реалізація дуже інша.