Gestern wollte ich etwas Software testen und in der Dokumentation stand, dass ich nur die Installation vornehmen musste
cpan -i Software
Ich habe nie Cpan verwendet, ich weiß nur, dass es der Perl-Paketmanager ist. (Ist es ..?) Es stellte sich jedoch heraus, dass ich viele Abhängigkeiten brauchte, und so dumm ich auch war, ich habe sie alle installiert. (Zuerst musste ich cpan einrichten, was mir viele Fragen stellte.) Lange Geschichte, ich möchte nur alles wieder entfernen. Ich googelte ein bisschen, und es scheint, als hätte cpan keine Deinstallationsroutine, insbesondere für alle Pakete gleichzeitig. Kann ich einfach ein Verzeichnis entfernen oder stoße ich auf Probleme?
der Befehl cpan
ist nicht wirklich ein Paketmanager wie apt-get
. Es handelt sich eher um ein Tool, das von CPAN (der Site oder einem Spiegelserver) heruntergeladen und installiert wird. Nachdem er diese Aufgabe erledigt hat, erinnert er sich nicht mehr an das, was zuvor getan wurde, zumindest nicht genug, um zuvor installierte Module zu entfernen, zumindest nicht zuverlässig, sauber oder abhängigkeitssicher. ( Update: Nach dem Anzeigen von App::pmuninstall
kann es verwendet werden, um Abhängigkeiten zu behandeln, aber es macht dies, indem es eine Verbindung zu externen Quellen (read: web) herstellt, die diese separat berechnen, was in Ordnung ist. aber ich stehe zu der vorherigen Aussage, dass CPAN.pm dies nicht tut.)
Früher habe ich mir Sorgen über das Entfernen von Modulen gemacht, aber jetzt merke ich, dass die meisten Perl-Module so wenig Platz beanspruchen, dass ich mir einfach keine Gedanken darüber machen muss, dass ein paar zusätzliche Module installiert werden, die Sie niemals verwenden werden. Wenn Sie also nicht mit einem wirklich kleinen Datenträger auf einem Computer arbeiten, würde ich das einfach zulassen.
Unter Windows oder wenn Sie ein nicht-systemfähiges Perl unter Linux/Mac verwenden, können Sie Perl einfach entfernen und neu installieren. Ich würde dies nicht empfehlen, wenn Sie das auf dem System installierte Perl unter Linux/Mac verwenden. Dies könnte jedoch dazu führen, dass Ihr Betriebssystem beschädigt wird (Sie könnten in Ordnung sein, wenn Sie vorsichtig waren, aber es lohnt sich nicht, ein paar MB zu sparen!).
In der Zukunft können Sie einfach eine lokale Version von Perl mit perlbrew installieren. Es gibt Tutorials im ganzen Web, wenn die Dokumente nicht ausreichen (sie sollten). Dies hat auch den Vorteil, dass Sie mit den neuesten und besten Perl-Versionen spielen können, die Ihr System wahrscheinlich noch nicht mitbringt. Wenn Sie dann einen Müllberg installieren oder ihn mit etwas Verrücktem zerstören, entfernen Sie diese Version und installieren/installieren Sie eine andere Version.
Ein weiteres Nice-Tool ist cpanminus (oder kurz cpanm), ein neueres, benutzerfreundlicheres Cpan-Tool. Alle coolen Kinder benutzen es.
Sie können einzelne Module mit cpanplus (im Lieferumfang von Perl enthalten) folgendermaßen deinstallieren:
cpanp uninstall SQL::Abstract
Sie können alle mit dem cpan-Skript installierten Module wie folgt anzeigen:
perldoc perllocal
Die zwei zusammen setzen:
for module in $(perldoc -u perllocal | grep -F 'C<Module> L<' | sed 's/^.*L<\(.*\)|.*>$/\1/') ; do
cpanp uninstall "$module"
done
Ich bin nicht sicher, ob "alles" entfernt werden soll. Um ein einzelnes Modul zu entfernen, können Sie jedoch mit App::pmuninstall
mit seinem einzigen Skript pm-uninstall
Module deinstallieren. Sie können dann möglicherweise ein Skript schreiben, um die Deps rekursiv zu entfernen.
Wenn Sie cpan nicht mehr verwenden können, da sich in Ihrem Pfad inkompatible Module befinden, können Sie alle installierten Module von Hand entfernen. Ich habe zum Beispiel ein Upgrade von Fedora 22 auf Fedora 23 durchgeführt und die Perl-Version geändert. Alle zuvor über cpanm in /usr/local/lib64/Perl5
installierten Module funktionierten nicht mehr und verhinderten die Verwendung von 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.
...
Ich könnte dieses Problem lösen, indem ich das Verzeichnis verschiebe:
$ mv /usr/local/lib64/Perl5 /root/usr-local-lib64-Perl5
Der Name dieses Verzeichnisses kann auf Ihrem System variieren.
Carefull: Wenn ein Modul Dateien außerhalb dieses Verzeichnisses installiert hat, z. B. Systembibliotheksdateien, bleiben diese Dateien dort.
Ich werde Flimms Antwort ändern, um cpanm zu verwenden, und optional kann man cpanm selbst am Ende des Skripts deinstallieren:
#!/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
Ich denke, die beste Option ist, Perl zu deinstallieren und erneut zu installieren.