Відповіді:
Щоб уникнути випадкового обрізання листя, яке може бути запитом, вам слід встановити 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, але реалізація дуже інша.