Come rimuovere i pacchetti MacPorts inutilizzati?


94

Ogni volta che installo un programma tramite MacPorts, ottiene e installa molte dipendenze. Quando disinstallo detto programma, come posso fare in modo che MacPorts rimuova in modo ricorsivo tutte le dipendenze non utilizzate con esso?

Risposte:


105

Per evitare di tagliare accidentalmente foglie che potrebbero essere cose che hai richiesto, devi installare il port_cutleavespacchetto, 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 flatformato . Il sqliteformato DB porta è il valore predefinito per le nuove installazioni; le vecchie installazioni che sono state aggiornate a 1.9.x continueranno a utilizzare il flatformato 1 . È possibile convertire un flatsistema 1.9.x nel sqliteformato aggiornando a MacPorts 2.0 o modificando il portdbformatvalore /opt/local/etc/macports/macports.confe 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 leavespseudo-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 leavesper disinstallare le porte non necessarie.


11
Grazie. Questo è abbastanza utile. Sembra che potresti dover eseguire foglie eco e disinstallare le foglie schiena contro schiena più volte per assicurarti che tutte le foglie siano pulite. Ho eseguito entrambi i comandi almeno 4 volte prima che le foglie dell'eco restituiscano un risultato vuoto
Antony,

6
Potresti dire qualcosa di simile while sudo port uninstall leaves; do :; doneper automatizzare quello.
Tom Anderson,

2
@ChrisJohnsen sudo port uninstall --follow-dependents portnamenon è 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".
TachyonVortex,

8

Dai documenti :

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‑dependenciesflag. 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.


Non credo che questo risponda alla domanda. L'OP vuole rimuovere un programma e le cose che richiede, non rimuovere un programma e le cose che lo richiedono.

2
@mankoff: ‑‑follow‑dependenciesvs ‑‑follow‑dependents.; il passaggio citato descrive entrambi, ma solo il primo si applica alla domanda
Chris Johnsen,

3
Personalmente, penso che sia grandioso che Philip spieghi entrambi i parametri, quindi siamo pienamente consapevoli dei parametri e delle loro implicazioni sull'emissione di tale comando
Antony,

3

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 -fflag (force).

Ovviamente dovresti iniziare leggendo la Guida di MacPorts in particolare nella sezione Guida alla disinstallazione.


3

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.


2

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.


1

Penso che le altre risposte e la --follow-dependentsbandiera non facciano quello che vuoi. Se lo installi Ae lo Arichiedi B, grazie ai meravigliosi sistemi di gestione dei pacchetti, Bverrà installato per te. È possibile disinstallare Be il --follow-dependentsflag 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, Bviene 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 debfosterse 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.


Ma debfoster non è per i file deb sul sistema basato su Debian? Come lo uso per le porte MacPorts su Mac OS X?
hpy,

È stato portato su OS X e MacPorts e i fink sono basati sul aptsistema utilizzato da Debian. Non uso MacPorts, ma ho fatto un fink install debfostere ha funzionato bene per me.

MacPorts non è correlato al aptsistema e non utilizza debfile. L'idea di MacPorts è legata alle porte FreeBSD o pkgsrc di NetBSD, ma l'implementazione è molto diversa.
Chris Johnsen,

1
OK. Grazie per la correzione. Indipendentemente da ciò, debfoster è stato portato su per funzionare bene fink. Ulteriori ricerche mostrano che non funziona con MacPorts, ma ci sono cloni, per esempio, vediportsfoster
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.