Удаление/удаление пакета 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