Immer wenn ich ein Programm über MacPorts installiere, werden viele Abhängigkeiten abgerufen und installiert. Wie kann ich bei der Deinstallation dieses Programms dafür sorgen, dass MacPorts alle nicht verwendeten Abhängigkeiten rekursiv entfernt?
Um zu vermeiden, dass Blätter versehentlich abgeschnitten werden, sollten Sie das port_cutleaves
Paket installieren und dann https://guide.macports.org/#using.common-tasks.keeplean ausführensudo port_cutleaves
MacPorts 1.9.0 fügte das hinzusqlite
portdbformat
und MacPorts 2.0.0 flat
löschte das alte Format . Das sqlite
Port-DB-Format ist die Standardeinstellung für Neuinstallationen. Alte Installationen, die auf 1.9.x aktualisiert wurden, verwenden weiterhin das flat
Format 1 . Sie können eine 1.9.x konvertieren flat
System auf den sqlite
durch ein Upgrade auf MacPorts 2.0 oder durch Änderung des portdbformat
Formatwert in /opt/local/etc/macports/macports.conf
und dann Ausgeben einen Port - Befehls als Root (z sudo port installed
).
Eines der Merkmale des neuen Formats ist, dass es die "angeforderten" im Vergleich zu "nicht angeforderten" Portinstallationen verfolgt. Ein nicht angeforderter Port wurde nur installiert, weil ein anderer Port davon abhängt. Der leaves
Pseudo-Portname wird auf alle nicht angeforderten Ports erweitert, von denen kein anderer installierter Port abhängt. Sie können diese Option verwenden, um nicht benötigte Ports zu bereinigen, auch wenn Sie sie ursprünglich nicht mit deinstalliert haben sudo port uninstall --follow-dependencies portname
(was tun wird, was Sie wollen, aber nur, wenn Sie es bei jeder Deinstallation verwenden).
Sie sollten Ihre vorhandenen Blätter untersuchen, bevor Sie sie deinstallieren.
port echo leaves
Einige gemeinsamen Blätter ( automake
, gperf
, libtool
, pkgconfig
) sind build-Zeitabhängigkeiten von gemeinsamen Ports, so dass Sie möglicherweise auf „Anfrage“ , um sie ( sudo port setrequested port1 port2 port3 …
) zu deinstallieren , sie zu vermeiden nur zu haben , um sie später erneut zu installieren.
Sie können alle verbleibenden Blätter ganz einfach deinstallieren:
sudo port uninstall leaves
Hinweis: Bevor Sie Ihre Blätter beschneiden, möchten Sie möglicherweise auch alte Versionen von Ports deinstallieren, die nicht mehr aktiv sind. Dies kann einige weitere Blätter aufdecken (dh Ports, die Abhängigkeiten von installierten, aber inaktiven Ports sind):
sudo port uninstall inactive
Es gibt mehrere Abschnitte in dem MacPorts Führer , die auch den Prozess beschreiben , die Verwendung von leaves
nicht benötigten Ports zu deinstallieren.
while sudo port uninstall leaves; do :; done
zu automatisieren.sudo port uninstall --follow-dependents portname
ist falsch, weil--follow-dependents
"alle Ports, die vom angegebenen Port abhängen, rekursiv deinstalliert werden". Die richtige Option lautet hier:--follow-dependencies
"Alle Ports, von denen der angegebene Port abhängig ist , werden rekursiv deinstalliert. Abhängigkeiten, die als angefordert gekennzeichnet sind oder andere abhängige Ports haben, werden dadurch nicht deinstalliert."Aus den Dokumenten :
Beachten Sie die wichtigsten Vorsichtsmaßnahmen im letzten Absatz. Abhängigkeiten sind genau das - Abhängigkeiten - und verschiedene Apps können (werden) die gleichen Abhängigkeiten erfordern.
quelle
‑‑follow‑dependencies
vs.‑‑follow‑dependents
; Die zitierte Passage beschreibt beide, aber nur die erste gilt für die FrageDer Befehl zum Entfernen eines Ports und seiner abhängigen Komponenten lautet:
Wenn der zu deinstallierende Port jedoch abhängige Komponenten hat, wird er nicht ohne das
-f
Flag (force) deinstalliert .Beginnen Sie natürlich mit dem Lesen des MacPorts-Handbuchs, indem Sie den Abschnitt Deinstallationshandbuch lesen .
quelle
Das Contrib-Verzeichnis von MacPorts enthält auch ein Skript namens port_cutleaves, mit dem Sie nicht benötigte Abhängigkeiten entfernen können: http://trac.macports.org/browser/contrib/ . Sie werden nach jedem zu deinstallierenden Port gefragt und können einige behalten, falls Sie dies möchten.
quelle
Ich habe einige Skripte geschrieben, um die Portbereinigung zu automatisieren: https://github.com/vasi/macports-tools
Das 'macportsfoster'-Skript gibt eine Liste aller Ports aus, die von nichts in der angeforderten Liste benötigt werden. Die Reihenfolge ist so, dass' port disable $ (macportsfoster) 'alle Ports auf einmal entfernt.
quelle
Ich denke, die anderen Antworten und die
--follow-dependents
Flagge tun nicht, was Sie wollen. Wenn Sie installierenA
undA
benötigenB
, dann werden dank der wunderbaren PaketverwaltungssystemeB
diese für Sie installiert. Sie können deinstallierenB
und das--follow-dependents
Flag wird erkannt und entferntA
. Aber was ist, wenn Sie deinstallierenA
, was wahrscheinlicher ist, weilA
das, was Sie manuell installiert haben, an erster Stelle steht? In diesem FallB
bleibt zurück.Wenn Sie fink verwenden, soll das debfoster- Paket Ihr System bereinigen und nicht verwendete Abhängigkeiten entfernen.
Während
debfoster
nicht für MacPorts arbeiten, scheint es Ports zu seindebfoster
zum Beispiel,portsfoster
obwohl es eingestellt zu sein scheint ...Möglicherweise gibt es derzeit keine Lösung für MacPorts.
quelle
apt
von Debian verwendeten System. Ich benutze keine MacPorts, aber ich habe einen gemachtfink install debfoster
und es hat gut funktioniert für mich.apt
systembezogen und verwendet keinedeb
Dateien. Die Idee von MacPorts ist mit FreeBSD-Ports oder NetBSD pkgsrc verwandt, aber die Implementierung ist sehr unterschiedlich.fink
. Weitere Suche zeigt, dass es nicht mit MacPorts funktioniert, aber es gibt Klone, zum Beispielportsfoster