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?
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.
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
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.
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.
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
Je pense que la meilleure option est de désinstaller Perl et de l'installer à nouveau.