Chaque fois que j'installe un programme via MacPorts, il génère et installe de nombreuses dépendances. Lorsque je désinstalle ledit programme, comment puis-je faire en sorte que MacPorts supprime récursivement toutes les dépendances inutilisées?
Pour éviter de couper accidentellement les feuilles que vous avez demandées, vous devez installer le port_cutleaves
paquet, puis exécuter sudo port_cutleaves
https://guide.macports.org/#using.common-tasks.keeplean.
MacPorts 1.9.0 a ajouté lesqlite
portdbformat
et MacPorts 2.0.0 a abandonné l'ancien flat
format . Le sqlite
format de la base de données de port est la valeur par défaut pour les nouvelles installations. les anciennes installations qui ont été mises à niveau vers 1.9.x continueront à utiliser le flat
format 1 . Vous pouvez convertir un flat
système 1.9.x au sqlite
format en effectuant une mise à niveau vers MacPorts 2.0 ou en modifiant la portdbformat
valeur /opt/local/etc/macports/macports.conf
puis en émettant une commande de port en tant que root (par exemple sudo port installed
).
Une des caractéristiques du nouveau format est qu’il garde la trace des installations de port «demandées» par rapport aux installations «non demandées». Un port non demandé est un port qui n'a été installé que parce qu'un autre port en dépend. Le leaves
pseudo-portname s'étend à tous les ports non sollicités dont ne dépend aucun autre port installé. Vous pouvez l'utiliser pour «nettoyer» les ports inutiles, même si vous ne les avez pas désinstallés à l'origine sudo port uninstall --follow-dependencies portname
(vous obtiendrez ce que vous voulez, mais seulement si vous pensez l'utiliser chaque fois que vous désinstallez quelque chose).
Vous devriez examiner vos feuilles existantes avant de désinstaller l'une d'elles.
port echo leaves
Quelques feuilles communes ( automake
, gperf
, libtool
, pkgconfig
) sont construire temps dépendances de ports communs, de sorte que vous voudrez peut - être « demande » les ( sudo port setrequested port1 port2 port3 …
) pour éviter de les désinstaller juste pour les réinstaller plus tard.
Vous pouvez désinstaller les feuilles restantes assez facilement:
sudo port uninstall leaves
Remarque: Avant d'élaguer vos feuilles, vous pouvez également désinstaller les anciennes versions des ports qui ne sont plus «actifs». Cela peut révéler quelques feuilles supplémentaires (par exemple, les ports qui sont des dépendances des ports installés, mais inactifs):
sudo port uninstall inactive
Il y a plusieurs sections dans le Guide MacPorts qui décrivent également le processus d'utilisation leaves
de désinstaller les ports non nécessaires.
while sudo port uninstall leaves; do :; done
automatiser cela.sudo port uninstall --follow-dependents portname
est incorrect, car--follow-dependents
"désinstallera de manière récursive tous les ports qui dépendent du port spécifié". L'option correcte est--follow-dependencies
"désinstaller récursivement tous les ports dont dépend le port spécifié. Cela ne désinstallera pas les dépendances marquées comme étant demandées ou ayant d'autres personnes à charge".De la docs :
Notez la mise en garde majeure dans le dernier paragraphe. Les dépendances sont exactement cela - des dépendances - et différentes applications peuvent nécessiter les mêmes dépendances.
la source
‑‑follow‑dependencies
vs‑‑follow‑dependents
; le passage cité décrit les deux, mais seul le premier s'applique à la questionLa commande pour supprimer un port et ses dépendants est la suivante:
Toutefois, si le port que vous désinstallez a des personnes à charge, il ne sera pas désinstallé sans l'
-f
indicateur (force).Bien sûr, vous devriez commencer par lire le Guide MacPorts en consultant plus particulièrement la section du guide de désinstallation.
la source
Il existe également un script dans le répertoire contrib de MacPorts appelé port_cutleaves que vous pouvez exécuter pour supprimer les dépendances inutiles: http://trac.macports.org/browser/contrib/ . Il vous demandera chaque port à désinstaller et vous permettra d'en conserver, si vous le souhaitez.
la source
J'ai écrit quelques scripts pour automatiser le nettoyage du port: https://github.com/vasi/macports-tools
Le script 'macportsfoster' produira une liste de tous les ports non requis par un élément quelconque de la liste demandée, ordonnée de telle sorte que 'le port désactiver $ (macportsfoster)' les supprimera tous d'un coup.
la source
Je pense que les autres réponses, et le
--follow-dependents
drapeau, ne font pas ce que vous voulez. Si vous installezA
etA
nécessiteB
, alors, grâce aux merveilleux systèmes de gestion de paquets,B
sera installé pour vous. Vous pouvez désinstallerB
et le--follow-dependents
drapeau sera au courant et à supprimerA
. Mais que se passe-t-il si vous désinstallezA
, ce qui est plus probable, carA
est ce que vous avez manuellement installé en premier lieu? Dans ce cas,B
est laissé pour compte.Si vous utilisez fink, le paquet debfoster est conçu pour nettoyer votre système et supprimer les dépendances inutilisées.
Bien que
debfoster
cela ne fonctionne pas pour MacPorts, il semble y avoir des ports dedebfoster
, par exempleportsfoster
, bien qu'il semble avoir été interrompu ...Peut-être qu’aucune solution n’existe actuellement pour MacPorts.
la source
apt
système utilisé par Debian. Je n'utilise pas MacPorts, mais j'en ai fait unfink install debfoster
et cela a bien fonctionné pour moi.apt
système et n'utilise pas dedeb
fichiers. L'idée de MacPorts est liée aux ports FreeBSD ou à NetBSD pkgsrc, mais la mise en œuvre est très différente.fink
. Une recherche plus poussée montre que cela ne fonctionne pas avec MacPorts, mais il existe des clones, par exemple, voirportsfoster