Ilekroć instaluję program za pośrednictwem MacPorts, pobiera i instaluje wiele zależności. Kiedy odinstalowuję wspomniany program, jak sprawić, aby MacPorts rekurencyjnie usuwał z nim wszystkie nieużywane zależności?
Aby uniknąć przypadkowego cięcia liści, które mogą być czymś, o co prosiłeś, powinieneś zainstalować port_cutleaves
pakiet, a następnie uruchomić sudo port_cutleaves
https://guide.macports.org/#using.common-tasks.keeplean
MacPorts 1.9.0 dodał,sqlite
portdbformat
a MacPorts 2.0.0 porzucił stary flat
format . sqlite
Format portem DB jest domyślny dla nowych instalacji; stare instalacje zaktualizowane do wersji 1.9.x będą nadal korzystać z flat
formatu 1 . Możesz przekonwertować flat
system 1.9.x na sqlite
format, uaktualniając do MacPorts 2.0 lub zmieniając portdbformat
wartość w, /opt/local/etc/macports/macports.conf
a następnie wydając polecenie port jako root (np sudo port installed
.).
Jedną z cech nowego formatu jest to, że śledzi on „wymagane” i „niepotrzebne” instalacje portów. Niewymagany port to taki, który został zainstalowany tylko dlatego, że zależy od niego inny port. leaves
Pseudo-nazwa_portu rozszerza się do wszystkich Niepożądany portów, na których nikt inny zainstalowany portu zależy. Możesz użyć tego do „wyczyszczenia” niepotrzebnych portów, nawet jeśli pierwotnie ich nie odinstalowałeś sudo port uninstall --follow-dependencies portname
(co zrobi, co chcesz, ale tylko jeśli pamiętasz, aby używać go za każdym razem, gdy coś odinstalowujesz).
Przed odinstalowaniem któregokolwiek z nich powinieneś sprawdzić istniejące liście.
port echo leaves
Niektóre wspólne liście ( automake
, gperf
, libtool
, pkgconfig
) są w czasie budowy zależności typowych portów, więc może chcesz „żądanie” je ( sudo port setrequested port1 port2 port3 …
), aby uniknąć ich odinstalowanie prostu musiał ponownie zainstalować je później.
Możesz całkiem łatwo odinstalować pozostałe liście:
sudo port uninstall leaves
Uwaga: przed przycięciem liści możesz również odinstalować stare wersje portów, które nie są już „aktywne”. Może to ujawnić kilka dodatkowych liści (tzn. Portów, które są zależnościami portów, które są zainstalowane, ale nieaktywne):
sudo port uninstall inactive
W Przewodniku MacPorts znajduje się kilka sekcji, w których opisano również proces odinstalowywania niepotrzebnych portów.leaves
while sudo port uninstall leaves; do :; done
aby to zautomatyzować.sudo port uninstall --follow-dependents portname
jest niepoprawny, ponieważ--follow-dependents
„rekurencyjnie odinstaluje wszystkie porty zależne od określonego portu”. Poprawna jest tutaj opcja--follow-dependencies
, która „rekurencyjnie odinstaluje wszystkie porty, od których zależał określony port. Nie spowoduje to odinstalowania zależności oznaczonych jako żądane lub posiadających inne zależności”.Z dokumentów :
Zwróć uwagę na główne zastrzeżenie w ostatnim akapicie. Zależności są dokładnie takie - zależności - a różne aplikacje mogą (będą) wymagać tych samych zależności.
źródło
‑‑follow‑dependencies
vs‑‑follow‑dependents
.; cytowany fragment opisuje oba, ale tylko pierwsze odnosi się do pytaniaPolecenie usunięcia portu i jego elementów zależnych to:
Jeśli jednak deinstalowany port ma zależności, nie zostanie odinstalowany bez
-f
flagi (wymuś).Oczywiście powinieneś zacząć od przeczytania Przewodnika MacPorts, w szczególności w sekcji Przewodnika dezinstalacji.
źródło
W katalogu contrib MacPorts znajduje się również skrypt o nazwie port_cutleaves, który można uruchomić, aby usunąć niepotrzebne zależności: http://trac.macports.org/browser/contrib/ . Poprosi Cię o każdy port, który ma zostać odinstalowany i pozwoli zachować niektóre, jeśli chcesz.
źródło
Napisałem kilka skryptów do automatyzacji czyszczenia portów: https://github.com/vasi/macports-tools
Skrypt „macportsfoster” wyświetli listę wszystkich portów niewymaganych przez nic na liście żądań, uporządkowany w taki sposób, że „port dezaktywuj $ (macportsfoster)” usunie je wszystkie za jednym razem.
źródło
Myślę, że inne odpowiedzi i
--follow-dependents
flaga nie rób tego, co chcesz. Jeśli zainstalujeszA
iA
wymagaB
, to dzięki wspaniałym systemom zarządzania pakietamiB
zostanie dla Ciebie zainstalowany. Możesz odinstalować,B
a--follow-dependents
flaga będzie wiedzieć i usunąćA
. Ale co, jeśli odinstalujeszA
, co jest bardziej prawdopodobne, ponieważA
to, co ręcznie zainstalowałeś w pierwszej kolejności? W takim przypadkuB
pozostaje w tyle.Jeśli używasz fink, pakiet debfoster jest zaprojektowany do czyszczenia systemu i usuwania nieużywanych zależności.
Chociaż
debfoster
nie będzie działać na MacPorts, wydaje się, że istnieją portydebfoster
, na przykładportsfoster
, chociaż wydaje się, że został wycofany ...Być może obecnie nie istnieje żadne rozwiązanie dla MacPorts.
źródło
apt
systemie używanym przez Debiana. Nie używam MacPorts, ale zrobiłemfink install debfoster
i działało to dobrze dla mnie.apt
systemem i nie używadeb
plików. Idea MacPorts jest związana z portami FreeBSD lub pkgsrc NetBSD, ale implementacja jest zupełnie inna.fink
. Dalsze wyszukiwanie pokazuje, że to nie działa z MacPorts, ale istnieją klony, na przykład zobaczportsfoster