Ogni volta che installo un programma tramite MacPorts, ottiene e installa molte dipendenze. Quando disinstallo il programma, come faccio a ripristinare in modo ricorsivo tutte le dipendenze non utilizzate con MacPorts?
Per evitare di tagliare accidentalmente foglie che potrebbero essere le cose che hai richiesto, devi installare il pacchetto port_cutleaves
quindi eseguire sudo port_cutleaves
link
MacPorts 1.9.0 ha aggiunto sqlite
portdbformat
e MacPorts 2.0.0 ha abbandonato il vecchio formato flat
. Il formato di porta DB sqlite
è il valore predefinito per le nuove installazioni; le vecchie installazioni che sono state aggiornate alla versione 1.9.x continueranno a utilizzare il formato flat
1 . Puoi convertire un sistema diflat
1.9.x% nel formato sqlite
eseguendo l'aggiornamento a MacPorts 2.0 o modificando il valore portdbformat
in /opt/local/etc/macports/macports.conf
e quindi emettendo un comando port come root ( per esempio sudo port installed
).
Una delle caratteristiche del nuovo formato è che tiene traccia delle installazioni di porte "richieste" o "non richieste". Una porta non richiesta è una che è stata installata solo perché alcune altre porte dipendono da essa. Il pseudo-portname leaves
si espande su tutte le porte non richieste su cui non dipende nessuna altra porta installata. Puoi usarlo per "ripulire" le porte non necessarie anche se inizialmente non le hai disinstallate con sudo port uninstall --follow-dependencies portname
(che farà ciò che vuoi, ma solo se ti ricordi di usarlo ogni volta che disinstalli qualcosa).
Dovresti esaminare le tue foglie esistenti prima di disinstallarle.
port echo leaves
Alcune foglie comuni ( automake
, gperf
, libtool
, pkgconfig
) sono dipendenze build-time delle porte comuni, quindi potresti volerle "richiedere" ( sudo port setrequested port1 port2 port3 …
) per evitare di disinstallarle solo per reinstallarli in seguito.
Puoi disinstallare le foglie rimanenti abbastanza facilmente:
sudo port uninstall leaves
Nota: prima di potare le tue foglie, potresti anche voler disinstallare vecchie versioni di porte che non sono più "attive". Questo potrebbe rivelare qualche foglia in più (ad esempio, porte che dipendono da porte installate, ma inattive):
sudo port uninstall inactive
Ci sono diverse sezioni nel Guida MacPorts che descrive anche il processo di utilizzo di leaves
per disinstallare le porte non necessarie.
The uninstall action will uninstall an installed port.
%% sudo port uninstall vile Note
To also recursively uninstall the ports that the given port depends on, use the
‑‑follow‑dependencies
flag. This will not uninstall dependencies that are marked as requested or that have other dependents.To recursively uninstall all ports that depend on the given port before uninstalling the port itself, use the
‑‑follow‑dependents flag
.If a port is a dependency of another installed port, uninstall will not remove it unless you remove the dependent port(s) first. To override this behavior, use the -f (force) switch. This will obviously break the dependents. Don't force uninstall ports unless you know what you are doing.
%% sudo port -f uninstall vile
Notare l'avvertenza maggiore nell'ultimo paragrafo. Le dipendenze sono esattamente tali dipendenze e le diverse app possono (richiedono) la stessa dipendenza.
Il comando per rimuovere una porta e i suoi dipendenti è:
sudo port uninstall foo --follow-dependents
Tuttavia, se la porta che si sta disinstallando ha dipendenti, non verrà disinstallata senza il flag -f
(force).
Ovviamente dovresti iniziare leggendo la Guida MacPorts esaminando specificamente la
Penso che le altre risposte, e il --follow-dependents
flag, non facciano quello che vuoi. Se installi A
e A
richiede B
, quindi grazie ai meravigliosi sistemi di gestione dei pacchetti, verrà installato B
per te. Puoi disinstallare B
e il flag --follow-dependents
ne sarà a conoscenza e rimuovere A
. Ma cosa succede se disinstalli A
, che è più probabile, perché A
è ciò che hai installato manualmente in primo luogo? In questo caso, B
viene lasciato indietro.
Se usi Fink, il pacchetto debfoster è progettato per ripulire il tuo sistema e rimuovere le dipendenze inutilizzate.
Debfoster will help you get rid of packages (libraries for example) get left behind on your system when the program that required it was removed or upgraded to a version that doesn't have the dependency.
Sebbene debfoster
non funzioni per MacPorts, sembra che ci siano porte di debfoster
, ad esempio portsfoster
, anche se sembra essere stato interrotto ...
Forse nessuna soluzione attualmente esiste per MacPorts.
Ho scritto alcuni script per automatizzare la pulizia delle porte: link
Lo script 'macportsfoster' produrrà un elenco di tutte le porte non richieste da nessun elemento nell'elenco richiesto, ordinato in modo tale che 'port disattivate $ (macportsfoster)' rimuoverà tutti in un solo colpo.
Leggi altre domande sui tag macports