Ответы:
Чтобы случайно не срезать листья, которые могут быть запрошены, вам следует установить port_cutleavesпакет и запустить sudo port_cutleaves
https://guide.macports.org/#using.common-tasks.keeplean.
MacPorts 1.9.0 добавил,sqlite portdbformat а MacPorts 2.0.0 отбросил старый flatформат . Формат sqliteDB DB используется по умолчанию для новых установок; старые установки, которые были обновлены до 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псевдопорта распространяется на все незапрошенные порты, от которых не зависит ни один другой установленный порт. Вы можете использовать это, чтобы «очистить» ненужные порты, даже если вы изначально не удаляли их 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 Guide есть несколько разделов, в которых также описан процесс использования для удаления ненужных портов.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' выведет список всех портов, которые не требуются для чего-либо в запрашиваемом списке, упорядоченный таким образом, что 'port deactivate $ (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, но реализация сильно отличается.