web-dev-qa-db-fra.com

Désinstallez tous les modules Perl installés par cpan

Hier, je voulais tester certains logiciels et dans la documentation, il était nécessaire de taper 

cpan -i Software

Je n'ai jamais utilisé cpan, je sais juste que c'est le gestionnaire de paquets Perl. (Est-ce que c'est ...?) Cependant, il s'est avéré qu'il me fallait des charges de dépendances, et stupide comme je le suis, je viens de toutes les installer. (Tout d'abord, j'ai dû configurer cpan qui m'a posé beaucoup de questions) Bref, je veux juste tout supprimer à nouveau. J'ai googlé un peu, et il semble que cpan n'a pas de routine de désinstallation, en particulier pour tous les paquets à la fois. Puis-je simplement supprimer un répertoire ou vais-je avoir des problèmes?

21
janoliver

la commande cpan n'est pas vraiment un gestionnaire de paquets comme le est apt-get. C'est plus un outil qui télécharge et installe à partir de CPAN (le site ou l'un de ses miroirs). Une fois cette tâche terminée, il ne se souvient plus beaucoup de ce qui avait été fait auparavant, du moins pas assez pour supprimer les modules précédemment installés, du moins pas de manière fiable, propre ou sans dépendance. (Update: Après avoir examiné App::pmuninstall , il peut être utilisé pour gérer les dépendances, mais il le fait en se connectant à des sources extérieures (lues: Web), qui les calculent séparément, ce qui est bien, mais je restez à l’affirmation précédente que CPAN.pm ne le fait pas.)

J'avais l'habitude de supprimer des modules, mais je me rends compte maintenant que la plupart des modules Perl prennent si peu de place que je ne m'inquiète pas de l'installation de quelques modules supplémentaires que vous n'utiliserez jamais. Donc, à moins que vous ne soyez sur un ordinateur avec un très petit disque, je le laisserais simplement.

Sous Windows ou si vous utilisez un système Perl non système sous Linux/Mac, vous pouvez simplement supprimer Perl, puis le réinstaller. Je ne le recommanderais pas si vous utilisez le système installé Perl sur Linux/Mac, mais vous pourriez briser votre système d'exploitation en procédant de la sorte (vous pourriez peut-être vous en contenter, mais vous ne valez pas la peine d'économiser quelques Mo!). 

Dans le futur, vous pourrez facilement installer une version locale de Perl en utilisant perlbrew , il existe des tutoriels sur le Web si les docs ne sont pas suffisants (ils devraient l'être). Cela présente également l'avantage de vous permettre de jouer avec les versions les plus récentes et les plus performantes de Perl, qui ne sont probablement pas encore livrées avec votre système. Ensuite, si vous installez une montagne de bric-à-brac, ou même le casser en le rendant fou, supprimez cette version et réinstallez/installez une autre version.

Un autre outil de Nice est cpanminus (ou cpanm en abrégé), qui est un outil cpan plus récent et plus convivial. Tous les enfants cools l'utilisent.

28
Joel Berger

Vous pouvez désinstaller des modules individuels avec cpanplus (livré avec Perl) comme ceci:

cpanp uninstall SQL::Abstract

Vous pouvez voir tous les modules installés avec le script cpan comme ceci:

perldoc perllocal

Mettre les deux ensemble:

for module in $(perldoc -u perllocal | grep -F 'C<Module> L<' | sed 's/^.*L<\(.*\)|.*>$/\1/') ; do
    cpanp uninstall "$module"
done
15
Flimm

Je ne suis pas sûr de supprimer "tout". Mais pour supprimer un seul module, vous pouvez utiliser App::pmuninstall avec son script unique pm-uninstall pour désinstaller les modules. Vous pourriez alors être en mesure d'écrire une sorte de script pour supprimer de manière récursive les dép.

2
xenoterracide

Si vous ne pouvez plus utiliser cpan parce que votre chemin contient des modules incompatibles, vous pouvez supprimer tous les modules installés à la main. Par exemple, je suis passé de Fedora 22 à Fedora 23 et la version de Perl a été modifiée. Tous les modules installés précédemment via cpanm dans /usr/local/lib64/Perl5 ne fonctionnaient plus et m'empêchaient d'utiliser cpanm.

$ cpanm --uninstall Apache::DBI
Attempt to reload Scalar/Util.pm aborted.
Compilation failed in require at /usr/share/Perl5/vendor_Perl/File/Temp.pm line 18.
...

Je pourrais résoudre ceci en déplaçant ce répertoire:

$ mv /usr/local/lib64/Perl5 /root/usr-local-lib64-Perl5

Le nom de ce répertoire peut varier sur votre système.

Attention: Si un module installe des fichiers en dehors de ce répertoire, par exemple des fichiers de bibliothèque système, ces fichiers y resteront.

1
Maikel

Je vais changer la réponse de Flimm pour utiliser cpanm et éventuellement désinstaller cpanm lui-même à la fin du script:

#!/usr/bin/env bash

for module in $(perldoc -u perllocal | grep -F 'C<Module> L<' | sed 's/^.*L<\(.*\)|.*>$/\1/' | sort | uniq) ; do
    if [[ "$module" =~ "App::cpanminus" ]]; then
        continue
    fi
    echo "Uninstalling $module..."
    yes | cpanm --uninstall "$module"
done

cpanm --uninstall App::cpanminus
0
Andrew Selivanov

Je pense que la meilleure option est de désinstaller Perl et de l'installer à nouveau.

0
DavidEG