107 votes

Comment supprimer les packages MacPorts inutilisés ?

Chaque fois que j'installe un programme via MacPorts, il récupère et installe de nombreuses dépendances. Lorsque je désinstalle ledit programme, comment faire en sorte que MacPorts supprime récursivement toutes les dépendances inutilisées avec lui ?

119voto

Nip Points 362

Pour éviter de couper accidentellement des feuilles qui pourraient être des choses que vous avez demandées, vous devriez installer le package port_cutleaves puis exécuter sudo port_cutleaves https://guide.macports.org/#using.common-tasks.keeplean


MacPorts 1.9.0 a ajouté le format sqlite portdbformat et MacPorts 2.0.0 a abandonné l'ancien format flat. Le format de base de données de port sqlite est le format par défaut pour les nouvelles installations; les anciennes installations qui ont été mises à jour vers 1.9.x continueront d'utiliser le format flat1. Vous pouvez convertir un système 1.9.x en format flat en format sqlite en mettant à jour vers MacPorts 2.0 ou en changeant la valeur de portdbformat dans /opt/local/etc/macports/macports.conf puis en émettant une commande port en tant que root (par exemple sudo port installed).

Une des fonctionnalités du nouveau format est qu'il garqule des installations de ports "demandées" et "non demandées". Un port non demandé est un port qui a été uniquement installé parce qu'un autre port en dépend. Le pseudo-nom de port leaves se développe vers tous les ports non demandés sur lesquels aucun autre port installé ne dépend. Vous pouvez utiliser cela pour "nettoyer" les ports non nécessaires même si vous ne les avez pas désinstallés à l'origine avec sudo port uninstall --follow-dependencies portname (ce qui fera ce que vous voulez, mais seulement si vous vous souvenez de l'utiliser à chaque fois que vous désinstallez quelque chose).


Vous devriez examiner vos feuilles existantes avant de désinstaller l'une d'entre elles.

port echo leaves

Certaines feuilles communes (automake, gperf, libtool, pkgconfig) sont des dépendances de construction de ports communs, donc vous voudrez peut-être les "demander" (sudo port setrequested port1 port2 port3 …) pour éviter de les désinstaller juste pour devoir les réinstaller plus tard.

Vous pouvez désinstaller toutes les feuilles restantes assez facilement :

sudo port uninstall leaves

Remarque : Avant de tailler vos feuilles, vous voudrez peut-être également désinstaller les anciennes versions de ports qui ne sont plus "actives". Cela pourrait révéler quelques feuilles supplémentaires (c'est-à-dire des ports qui sont des dépendances de 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 de leaves pour désinstaller les ports inutiles.

13 votes

Merci. C'est très utile. Il semble que vous deviez exécuter les commandes echo leaves et uninstall leaves à plusieurs reprises pour vous assurer que toutes les feuilles soient nettoyées. J'ai exécuté les deux commandes au moins 4 fois avant que echo leaves ne renvoie un résultat vide.

7 votes

Vous pourriez dire quelque chose comme while sudo port uninstall leaves; do :; done pour automatiser cela.

3 votes

@ChrisJohnsen sudo port uninstall --suivre-les-dépendances nom-du-port est incorrect, car --follow-dependents va "désinstaller de manière récursive tous les ports qui dépendent du port spécifié". L'option correcte ici est --follow-dependencies, qui va "désinstaller de manière récursive tous les ports sur lesquels le port spécifié dépendait. Cela ne désinstallera pas les dépendances qui sont marquées comme demandées ou qui ont d'autres dépendants."

10voto

Mike Polen Points 3173

À partir de la documentation:

L'action de désinstallation désinstallera un port installé.

%% sudo port uninstall vile

Note : Pour désinstaller également de manière récursive les ports sur lesquels le port donné dépend, utilisez le drapeau followdependencies. Cela ne désinstallera pas les dépendances qui sont marquées comme demandées ou qui ont d'autres dépendants.

Pour désinstaller de manière récursive tous les ports qui dépendent du port donné avant de désinstaller le port lui-même, utilisez le drapeau followdependents.

Si un port est une dépendance d'un autre port installé, la désinstallation ne le supprimera pas à moins que vous ne supprimiez d'abord le ou les ports dépendants. Pour remplacer ce comportement, utilisez l'interrupteur -f (force). Cela cassera évidemment les dépendants. Ne forcez pas la désinstallation des ports à moins de savoir ce que vous faites.

%% sudo port -f uninstall vile

Notez le principal avertissement dans le dernier paragraphe. Les dépendances sont exactement cela - des dépendances - et différentes applications peuvent (vont) nécessiter les mêmes dépendances.

0 votes

Je ne pense pas que cela réponde à la question. L'OP veut supprimer un programme et les choses dont il a besoin, pas supprimer un programme et les choses qui en ont besoin.

2 votes

@mankoff: suivrelesdépendances vs. suivrelesdépendants ; le passage cité décrit les deux, mais seul le premier s'applique à la question

3 votes

Personnellement, je pense qu'il est formidable que Philip explique les deux paramètres, pour que nous soyons pleinement conscients des paramètres et de leurs implications lors de l'émission d'une telle commande.

4voto

user26252 Points 101

Il y a aussi 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 pour chaque port à désinstaller et permettra d'en conserver certains, si vous le souhaitez.

Ce script est également disponible en tant que port. sudo port install port_cutleaves pour l'installer, puis sudo port cutleaves pour l'exécuter.

3voto

Andrei Freeman Points 313

La commande pour supprimer un port et ses dépendances est :

sudo port uninstall --follow-dependents foo

Cependant, si le port que vous désinstallez a des dépendances, il ne sera pas désinstallé sans le drapeau -f (force).

Il est bien sûr recommandé de commencer par lire le Guide de MacPorts en examinant spécifiquement la section du guide de désinstallation.

2voto

Adam Davis Points 47683

J'ai écrit quelques scripts pour automatiser le nettoyage des ports : https://github.com/vasi/macports-tools

Le script 'macportsfoster' produira une liste de tous les ports non nécessaires par quoi que ce soit dans la liste-demandée, ordonnés de telle sorte que 'port deactivate $(macportsfoster)' les supprimera tous en une fois.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X