Ответы:
Чтобы случайно не срезать листья, которые могут быть запрошены, вам следует установить 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
, который «рекурсивно удалит все порты, от которых зависит указанный порт. Это не удалит зависимости, помеченные как запрошенные или имеющие другие зависимости».
Действие удаления приведет к удалению установленного порта.
%% 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, но реализация сильно отличается.