Mam formułę Homebrew , którą chcę odinstalować / usunąć wraz ze wszystkimi jej zależnościami, pomijając pakiety, od których zależą inne pakiety (inaczej zwane usuwaniem pakietów kaskadowych w języku Menedżer pakietów).
np. Odinstaluj pakiet, a
który zależy od pakietów b
i c
, gdzie pakiet d
również zależy od pakietu c
. Wynik powinien odinstalować oba a
& b
, pomijając c
.
Jak mogę to zrobić?
Musi istnieć sposób na odinstalowanie pakietu bez pozostawiania niepotrzebnych śmieci .
Odpowiedzi:
EDYTOWAĆ:
Wygląda na to, że problem został rozwiązany za pomocą zewnętrznego polecenia o nazwie
brew rmdeps
lubbrew rmtree
.Aby zainstalować i używać, wydaj następujące polecenia:
Zobacz powyższy link, aby uzyskać więcej informacji i dyskusji.
Oryginalna odpowiedź:
Wygląda na to, że obecnie nie ma łatwego sposobu na osiągnięcie tego.
Jednak zgłosiłem problem na stronie GitHub Homebrew i ktoś zaproponował tymczasowe rozwiązanie, dopóki nie doda wyłącznego polecenia, aby rozwiązać ten problem.
Istnieje zewnętrzne polecenie o nazwie,
brew leaves
które wypisuje wszystkie pakiety, które nie są zależnościami innych pakietów.Jeśli wykonasz logikę i na wyjściu
brew leaves
ibrew deps <package>
, możesz po prostu uzyskać listę osieroconych pakietów zależności, które możesz później odinstalować ręcznie. Połącz to z,xargs
a dostaniesz to, czego potrzebujesz, tak sądzę (niesprawdzone, nie licz na to).EDYCJA: Ktoś właśnie zaproponował bardzo podobne rozwiązanie, używając
join
zamiastxargs
:Aby uzyskać więcej informacji, zobacz komentarz do wyżej wymienionego problemu .
źródło
This command requires a keg argument
.brew rmtree
Skrypt innej firmy jest teraz dostępny w kranu:brew tap beeftornado/rmtree && brew install beeftornado/rmtree/brew-rmtree
brew rm $(join <(brew leaves) <(brew deps FORMULA))
dobrze wykonuje swoją pracę. Musisz tylko uruchamiać go wielokrotnie, aż wszystkie zależności zostaną usunięte. Nie można odinstalować wszystkiego naraz, ponieważ zależności są od siebie zależne.&& brew install brew-rmtree
nie jest już konieczne.Celem jest usunięcie danego pakietu i jego zależności bez przerywania zależności innego pakietu. Używam tego polecenia:
Uwaga: Edytowane w celu odzwierciedlenia pomocnego komentarza @ alphadogg.
źródło
--ignore-dependencies
aby usunąć, aby to zadziałało.brew rmtree
w ogóle nie działa . Z linków na ten temat znalazłem rmrec, który faktycznie działa. Bóg wie, dlaczegobrew
nie ma tego jako natywnego polecenia.źródło
[FORMULA]
a następnie użyć rmrec aby rekurencyjnie usunąć wszystkie jego zależności.rmrec
to, że obecnie nie obsługuje zbyt dobrze pakietów z przestrzenią nazw. Używałem czegoś, co ściągnęłolinuxbrew/xorg/xorg
i usunęło wszystko oprócz tego pakietu, a nawet jawnie nadając mu nazwę, nie mogło go rozwiązać i nic nie zrobiło.rmrec
jest złe. W ogóle nie obsługuje zależności.rmtree
?rmrec
obsługuje zależności.God knows why brew doesn't have this as a native command.
=> Ponieważ twórcy piwa mają złe nastawienie. Nie pozwalają nawet ludziom otwierać żadnych problemów. Sprawdź github.com/Homebrew/brew , ma teraz tylko mniej niż 20 problemów. Tak mała liczba. Czy to dobrze? Nie, to bardzo źle.Na podstawie odpowiedzi @jfmercer (poprawki wymagają więcej niż komentarza).
Usuń zależności pakietu (nie usuwa pakietu):
Usuń paczkę:
Ponownie zainstaluj brakujące biblioteki:
Testowanie deinstalacji
meld
po wykryciu wersji MeldMerge .źródło
Użycie tej odpowiedzi wymaga utworzenia i utrzymania pliku zawierającego nazwy pakietów, które chcesz zainstalować w systemie. Jeśli jeszcze go nie masz, użyj następującego polecenia i usuń nazwy pakietów, których nie chcesz instalować.
Następnie możesz usunąć wszystkie zainstalowane, ale niechciane pakiety i wszelkie niepotrzebne zależności, uruchamiając następujące polecenie
brew_clean
jest dostępny tutaj: https://gist.github.com/cskeeters/10ff1295bca93808213dTen skrypt pobiera wszystkie pakiety określone w brew_packages i wszystkie ich zależności i porównuje je z danymi wyjściowymi,
brew list
a na koniec usuwa niechciane pakiety po zweryfikowaniu tej listy z użytkownikiem.W tym momencie, jeśli chcesz usunąć pakiet
a
, po prostu usuń go z pliku brew_packages, a następnie uruchom ponowniebrew_clean brew_packages
. Usunieb
, ale niec
.źródło
brew clean -s
brew cleanup -s && brew cask cleanup
Możesz po prostu użyć do tego potoku UNIX
źródło
brew missing
które powiedzą, jakie polecenie należy uruchomić, aby je odzyskaćZapisz następujący skrypt jako zaparzanie
Teraz zainstaluj go za pomocą następującego polecenia
Teraz uruchom
Przykład użycia gpg
źródło
Inne odpowiedzi nie działały dla mnie, ale to zadziałało (w
fish
powłoce):Ponieważ
brew remove $p
kończy się niepowodzeniem, gdy zależy od innego pakietup
.źródło
Pełniejsza funkcja powłoki Bourne'a
Istnieje już wiele dobrych odpowiedzi, ale niektóre są nieaktualne i żadna z nich nie jest kompletna. W szczególności większość z nich usunie zależności, ale nadal możesz pozostawić oryginalną formułę docelową później. Wysłane jedno-linijki mogą być również uciążliwe w pracy, jeśli chcesz odinstalować więcej niż jedną formułę na raz.
Oto funkcja powłoki kompatybilna z Bourne'em (bez żadnych znanych bashizmów), która pobiera listę formuł, usuwa zależności każdego z nich, usuwa wszystkie kopie samej formuły, a następnie przywraca wszelkie brakujące zależności.
Został przetestowany na Homebrew 1.7.4.
Ostrzeżenia
Działa to na wszystkich standardowych formułach, które przetestowałem. Obecnie nie obsługuje beczek, ale nie będzie też głośno narzekać, jeśli spróbujesz rozpakować beczkę o tej samej nazwie co standardowa formuła (np. MacVim).
źródło
Odpowiedź @jfmercer musi zostać nieznacznie zmodyfikowana, aby działała z bieżącym naparem, ponieważ
brew missing
zmieniła się moc wyjściowa :źródło