Risposte:
Per evitare di tagliare accidentalmente foglie che potrebbero essere cose che hai richiesto, devi installare il port_cutleaves
pacchetto, quindi eseguire sudo port_cutleaves
https://guide.macports.org/#using.common-tasks.keeplean
MacPorts 1.9.0 ha aggiuntosqlite
portdbformat
e MacPorts 2.0.0 ha eliminato il vecchio flat
formato . Il sqlite
formato DB porta è il valore predefinito per le nuove installazioni; le vecchie installazioni che sono state aggiornate a 1.9.x continueranno a utilizzare il flat
formato 1 . È possibile convertire un flat
sistema 1.9.x nel sqlite
formato aggiornando a MacPorts 2.0 o modificando il portdbformat
valore /opt/local/etc/macports/macports.conf
e quindi eseguendo un comando port come root (ad es sudo port installed
.).
Una delle caratteristiche del nuovo formato è che tiene traccia delle installazioni di porte "richieste" rispetto a "non richieste". Una porta non richiesta è quella che è stata installata solo perché un'altra porta dipende da essa. Lo leaves
pseudo-portname si espande a tutte le porte non richieste dalle quali non dipende alcuna altra porta installata. Puoi usarlo per "ripulire" le porte non necessarie anche se in origine non le hai disinstallate sudo port uninstall --follow-dependencies portname
(cosa che farà quello che vuoi, ma solo se ricordi di usarle ogni volta che disinstalli qualcosa).
È necessario esaminare i fogli esistenti prima di disinstallarli.
port echo leaves
Alcune foglie comuni ( automake
, gperf
, libtool
, pkgconfig
) sono costruire in tempo dipendenze di porte comuni, quindi si consiglia di “richiesta” loro ( sudo port setrequested port1 port2 port3 …
) per evitare la disinstallazione di loro solo per avere reinstallare in un secondo momento.
Puoi disinstallare abbastanza facilmente tutte le foglie rimanenti:
sudo port uninstall leaves
Nota: prima di potare le foglie, potresti anche voler disinstallare le vecchie versioni delle porte che non sono più "attive". Questo potrebbe rivelare qualche altro foglia (cioè porte che sono dipendenze delle porte installate, ma inattive):
sudo port uninstall inactive
Ci sono diverse sezioni nella Guida di MacPorts che descrivono anche il processo di utilizzo leaves
per disinstallare le porte non necessarie.
while sudo port uninstall leaves; do :; done
per automatizzare quello.
sudo port uninstall --follow-dependents portname
non è corretto, perché --follow-dependents
"disinstallerà in modo ricorsivo tutte le porte che dipendono dalla porta specificata". L'opzione corretta qui è --follow-dependencies
, che "disinstallerà in modo ricorsivo tutte le porte da cui dipendeva la porta specificata. Ciò non disinstallerà le dipendenze contrassegnate come richieste o che hanno altre dipendenze".
L'azione di disinstallazione disinstalla una porta installata.
%% sudo port uninstall vile Note
Per disinstallare anche in modo ricorsivo le porte da cui dipende la porta specificata, utilizzare il
‑‑follow‑dependencies
flag. Ciò non disinstalla le dipendenze contrassegnate come richieste o che hanno altre dipendenze.Per disinstallare in modo ricorsivo tutte le porte che dipendono dalla porta specificata prima di disinstallare la porta stessa, utilizzare il
‑‑follow‑dependents flag
.Se una porta dipende da un'altra porta installata, la disinstallazione non la rimuoverà a meno che non si rimuovano prima le porte dipendenti. Per ignorare questo comportamento, utilizzare l'opzione -f (force). Questo ovviamente romperà le persone a carico. Non forzare le porte di disinstallazione se non sai cosa stai facendo.
%% sudo port -f uninstall vile
Nota il principale avvertimento nell'ultimo paragrafo. Le dipendenze sono esattamente questo - dipendenze - e diverse app possono (vorranno) richiedere le stesse dipendenze.
‑‑follow‑dependencies
vs ‑‑follow‑dependents
.; il passaggio citato descrive entrambi, ma solo il primo si applica alla domanda
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 delle dipendenze, non verrà disinstallata senza il -f
flag (force).
Ovviamente dovresti iniziare leggendo la Guida di MacPorts in particolare nella sezione Guida alla disinstallazione.
C'è anche uno script nella directory contrib di MacPorts chiamato port_cutleaves che puoi eseguire per rimuovere dipendenze non necessarie: http://trac.macports.org/browser/contrib/ . Ti chiederà ciascuna porta da disinstallare e ti consentirà di conservarne alcune, se lo desideri.
Ho scritto alcuni script per automatizzare la pulizia delle porte: https://github.com/vasi/macports-tools
Lo script 'macportsfoster' mostrerà un elenco di tutte le porte non richieste da nulla nell'elenco richiesto, ordinato in modo tale che 'port disable $ (macportsfoster)' le rimuoverà tutte in una volta.
Penso che le altre risposte e la --follow-dependents
bandiera non facciano quello che vuoi. Se lo installi A
e lo A
richiedi B
, grazie ai meravigliosi sistemi di gestione dei pacchetti, B
verrà installato per te. È possibile disinstallare B
e il --follow-dependents
flag sarà a conoscenza e rimuoverlo A
. Ma cosa succede se si disinstalla A
, il che è più probabile, perché A
è quello che hai installato manualmente in primo luogo? In questo caso, B
viene lasciato indietro.
Se si utilizza fink, il pacchetto debfoster è progettato per ripulire il sistema e rimuovere le dipendenze non utilizzate.
Debfoster ti aiuterà a sbarazzarti dei pacchetti (ad esempio le librerie) che rimarranno sul tuo sistema quando il programma che lo richiede è stato rimosso o aggiornato a una versione che non ha la dipendenza.
Anche debfoster
se non funziona con MacPorts, sembrano esserci delle porte di debfoster
, ad esempio portsfoster
, anche se sembra essere interrotto ...
Forse al momento non esiste una soluzione per MacPorts.
apt
sistema utilizzato da Debian. Non uso MacPorts, ma ho fatto un fink install debfoster
e ha funzionato bene per me.
apt
sistema e non utilizza deb
file. L'idea di MacPorts è legata alle porte FreeBSD o pkgsrc di NetBSD, ma l'implementazione è molto diversa.