Всякий раз, когда я устанавливаю программу через MacPorts, она получает и устанавливает множество зависимостей. Когда я удаляю указанную программу, как заставить MacPorts рекурсивно удалять все неиспользуемые зависимости с ней?
Чтобы случайно не срезать листья, которые могут быть запрошены, вам следует установить 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 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
, который «рекурсивно удалит все порты, от которых зависит указанный порт. Это не удалит зависимости, помеченные как запрошенные или имеющие другие зависимости».Из документов :
Обратите внимание на главную оговорку в последнем абзаце. Зависимости - это как раз и есть зависимости - и разные приложения могут (будут) требовать одинаковых зависимостей.
источник
‑‑follow‑dependencies
против‑‑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
не будет работать для MacPorts, есть портыdebfoster
, напримерportsfoster
, хотя, кажется, больше не поддерживается ...Возможно, в настоящее время не существует решения для MacPorts.
источник
apt
системе, которая используется Debian. Я не использую MacPorts, но я это сделал,fink install debfoster
и у меня все получилось .apt
системе и не используетdeb
файлы. Идея MacPorts связана с портами FreeBSD или NetBSD pkgsrc, но реализация сильно отличается.fink
. Дальнейший поиск показывает, что он не работает с MacPorts, но есть клоны, например, смотритеportsfoster