Как я могу рекурсивно удалить зависимости в Homebrew?

Я пробую Homebrew, но при удалении «формулы» я не могу понять, как рекурсивно удалить зависимости. Т.е. Macports это:

$ port uninstall --follow-dependencies <portname>

Как это работает с Homebrew?

Ответы (5)

Простой способ решить проблему накопления зависимостей удаленных вещей — периодически запускать brew leaf и сравнивать его со списком требуемых листьев, а все остальное рекурсивно удалять.

Следующее работает, но, конечно, не очень читабельно:

1) Показать все листья за вычетом тех, что находятся в вашем списке розыска:

$ brew leaves | egrep -v 'bcwipe|brew-cask|lftp|mmv|mobile-shell|mplayer|node|octave|python|zsh'

2) После того, как вы откорректировали список (т.е. добавили новых хранителей), избавьтесь от остальных:

$ brew uninstall `brew leaves|egrep -v 'bcwipe|brew-cask|git|lftp|mmv|mobile-shell|mplayer|node|octave|python|zsh'`

Обычно это нужно вызывать несколько раз подряд, чтобы получить их все, а за последним вызовом должен следовать

$ brew cleanup

Чтобы немного украсить, список хранителей, конечно, можно хранить где-нибудь в файле.

Если вы предположили, что все в /usr/local/binнем привязано к «разыскиваемому» элементу, возможно, вы сможете программно сгенерировать разыскиваемый список. Вы бы пропустили чистую установку библиотеки, но, возможно, это проще, чем поддерживать список нужных элементов вручную.
Очень простое решение

Как сказал @Adam Vandenberg, нет простого способа сделать это.

Тем не менее, я зарегистрировал проблему на странице GitHub Homebrew , и, похоже, есть обходной путь для решения этой проблемы, пока они не добавят эксклюзивную команду.

См. мой ответ на StackOverflow для получения дополнительной информации.

Эксклюзивная команда уже разработана?

В 2021 году теперь вы можете использовать brew autoremove: https://docs.brew.sh/Manpage#autoremove---dry-run

К сожалению, Homebrew не отслеживает зависимости таким образом.

Я только что написал небольшой скрипт-обертку, чтобы добавить эту функциональность в brew. Загрузите его в свой .bashrc, и он будет отслеживать, какие пакеты вы устанавливаете, а затем рекурсивно удалять ненужные зависимости при удалении.

https://github.com/DaemonF/brew-рекурсивно-деинсталлировать