web-dev-qa-db-de.com

Deinstallieren Sie alle von cpan installierten Perl-Module

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?

21
janoliver

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.

28
Joel Berger

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
15
Flimm

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.

2
xenoterracide

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.

1
Maikel

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
0

Ich denke, die beste Option ist, Perl zu deinstallieren und erneut zu installieren.

0
DavidEG