Удаление/удаление пакета Homebrew, включая все его зависимости

У меня есть пакет Homebrew, который я хочу удалить/удалить со всеми его зависимостями, пропуская пакеты, от которых зависят другие пакеты.

например. Удалите пакет a, который зависит от пакетов b и c, где пакет d также зависит от пакета c. Результат должен удалить как a, так и b, пропуская c.

Как я могу это сделать?

Должен быть способ удалить пакет, не оставляя ненужного мусора.

Ответ 1

EDIT:

Похоже, проблема теперь решена с помощью внешней команды brew rmdeps или brew rmtree.

Чтобы установить и использовать, выполните следующие команды:

$ brew tap beeftornado/rmtree
$ brew rmtree <package>

См. приведенную выше ссылку для получения дополнительной информации и обсуждения.


Оригинальный ответ:

Похоже, что в настоящее время нет простого способа выполнить это.

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

Существует внешняя команда , называемая brew leaves, которая печатает все пакеты, которые не являются зависимостями других пакетов.

Если вы выполняете логические и на выводах brew leaves и brew deps <package>, вы можете просто получить список пакетов с сиротой зависимостей, которые впоследствии можно удалить вручную. Объедините это с xargs, и вы получите то, что вам нужно, я думаю (непроверенный, не рассчитывайте на это).


EDIT: Кто-то просто предложил очень похожее решение, используя join вместо xargs:

brew rm FORMULA
brew rm $(join <(brew leaves) <(brew deps FORMULA))

Дополнительную информацию см. в комментарии к проблеме, упомянутой выше.

Ответ 2

Цель состоит в том, чтобы удалить данный пакет и его зависимости без, нарушая другие зависимости пакета. Я использую эту команду:

brew deps [FORMULA] | xargs brew remove --ignore-dependencies && brew missing | xargs brew install

Примечание. Отредактировано, чтобы отразить полезный комментарий @alphadogg.

Ответ 3

Использование этого ответа требует создания и поддержки файла, который содержит имена пакетов, которые вы хотите установить в вашей системе. Если у вас его еще нет, используйте следующую команду и удалите имена пакетов, которые вы не хотите устанавливать.

brew leaves > brew_packages

Затем вы можете удалить все установленные, но нежелательные пакеты и любые ненужные зависимости, выполнив следующую команду

brew_clean brew_packages

brew_clean можно найти здесь: https://gist.github.com/cskeeters/10ff1295bca93808213d

Этот script получает все пакеты, указанные вами в brew_packages и всех их зависимостях, и сравнивает их с выходом brew list и, наконец, удаляет нежелательные пакеты после проверки этого списка с пользователем.

В этот момент, если вы хотите удалить пакет a, вы просто удалите его из файла brew_packages, а затем запустите brew_clean brew_packages. Он удалит b, но не c.

Ответ 4

На основе ответа @jfmercer (исправления необходимы больше, чем комментарий).

Удалить зависимости пакетов (не удаляет пакет):

brew deps [FORMULA] | xargs brew remove --ignore-dependencies

Удалить пакет:

brew remove [FORMULA]

Переустановите отсутствующие библиотеки:

brew missing | cut -d: -f2 | sort | uniq | xargs brew install

Протестировано удаление meld после обнаружения выпусков MeldMerge.

Ответ 5

brew rmtree не работает вообще. Из ссылок по этому вопросу я нашел rmrec, который действительно работает. Бог знает, почему brew не имеет этого в качестве собственной команды.

brew tap ggpeti/rmrec
brew rmrec pkgname

Ответ 6

Вы можете просто использовать UNIX-канал для этого

brew deps [FORMULA] | xargs brew rm