Antworten:
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."
Die Deinstallationsaktion deinstalliert einen installierten Port.
%% sudo port uninstall vile Note
Verwenden Sie das
‑‑follow‑dependencies
Flag , um die Ports, von denen der angegebene Port abhängt, auch rekursiv zu deinstallieren . Dadurch werden keine Abhängigkeiten deinstalliert, die als angefordert markiert sind oder andere Abhängigkeiten aufweisen.Um alle Ports, die vom angegebenen Port abhängen, rekursiv zu deinstallieren, bevor Sie den Port selbst deinstallieren, verwenden Sie die
‑‑follow‑dependents flag
.Wenn ein Port von einem anderen installierten Port abhängt, wird er bei der Deinstallation nur entfernt, wenn Sie zuerst die abhängigen Ports entfernen. Verwenden Sie die Option -f (force), um dieses Verhalten zu überschreiben. Dies wird offensichtlich die Angehörigen brechen. Erzwingen Sie keine Deinstallation von Ports, es sei denn, Sie wissen, was Sie tun.
%% sudo port -f uninstall vile
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.
‑‑follow‑dependencies
vs. ‑‑follow‑dependents
; Die zitierte Passage beschreibt beide, aber nur die erste gilt für die Frage
Der Befehl zum Entfernen eines Ports und seiner abhängigen Komponenten lautet:
sudo port uninstall foo --follow-dependents
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 .
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.
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.
Ich denke, die anderen Antworten und die --follow-dependents
Flagge tun nicht, was Sie wollen. Wenn Sie installieren A
und A
benötigen B
, dann werden dank der wunderbaren Paketverwaltungssysteme B
diese für Sie installiert. Sie können deinstallieren B
und das --follow-dependents
Flag wird erkannt und entfernt A
. Aber was ist, wenn Sie deinstallieren A
, was wahrscheinlicher ist, weil A
das, was Sie manuell installiert haben, an erster Stelle steht? In diesem Fall B
bleibt zurück.
Wenn Sie fink verwenden, soll das debfoster- Paket Ihr System bereinigen und nicht verwendete Abhängigkeiten entfernen.
Debfoster hilft Ihnen dabei, Pakete (z. B. Bibliotheken) zu entfernen, die auf Ihrem System zurückbleiben, wenn das erforderliche Programm entfernt oder auf eine Version aktualisiert wurde, die keine Abhängigkeit aufweist.
Während debfoster
nicht für MacPorts arbeiten, scheint es Ports zu sein debfoster
zum Beispiel, portsfoster
obwohl es eingestellt zu sein scheint ...
Möglicherweise gibt es derzeit keine Lösung für MacPorts.
apt
von Debian verwendeten System. Ich benutze keine MacPorts, aber ich habe einen gemacht fink install debfoster
und es hat gut funktioniert für mich.
apt
systembezogen und verwendet keine deb
Dateien. Die Idee von MacPorts ist mit FreeBSD-Ports oder NetBSD pkgsrc verwandt, aber die Implementierung ist sehr unterschiedlich.