web-dev-qa-db-ja.com

cpanによってインストールされたすべてのPerlモジュールをアンインストールします

昨日、いくつかのソフトウェアをテストし、ドキュメントに記載されていたように、インストールするために、入力するだけで十分でした。

cpan -i Software

私はcpanを使用したことがありません。Perlパッケージマネージャであることを知っています。 (それは..?)しかし、依存関係の負荷が必要であることが判明し、私は愚かであるので、それらすべてをインストールしました。 (最初に、多くの質問をするcpanをセットアップする必要がありました)簡単に言えば、すべてをもう一度削除したいだけです。私は少しグーグルしました、そしてそれはcpanがアンインストールルーチンを持っていないようです、特に一度にすべてのパッケージのために。一部のディレクトリを削除できますか、それとも問題が発生しますか?

23
janoliver

cpanコマンドは、実際にはapt-getのようなパッケージマネージャーではありません。これは、CPAN(サイト、またはそのミラーの1つ)からダウンロードしてインストールするツールです。このタスクが完了した後、以前に何が行われたかについてはほとんど覚えていません。少なくとも、以前にインストールされたモジュールを削除するには十分ではなく、少なくとも信頼性が高く、クリーンで、依存関係が安全ではありません。 (更新:App::pmuninstall を確認した後、依存関係の処理に使用できますが、これはこれらを別々に計算する外部(読み取り:web)ソースに接続することは問題ありませんが、CPAN.pmがこれを行わないという前の文はそのままです。)

以前はモジュールの削除について心配していましたが、今ではほとんどのPerlモジュールが占有するスペースが非常に少ないため、使用しない追加のモジュールをいくつかインストールすることについて心配する必要はありません。ですから、本当に小さなディスクのあるコンピュータを使用しているのでない限り、私はそれをそのままにします。

WindowsまたはLinux/Macでシステム以外のPerlを使用している場合は、Perlを削除して再インストールするだけです。 Linux/MacでシステムにインストールされたPerlを使用している場合はこれをお勧めしませんが、これを行うとOSが壊れる可能性があります(慎重に行っても大丈夫ですが、数MBを節約する価値はありません)。

将来的には、ローカルバージョンのPerlを perlbrew を使用して簡単にインストールできるようになります。ドキュメントが不十分な場合は、Web全体にチュートリアルがあります(十分なはずです)。これには、システムにまだ付属していない可能性のある最新かつ最高のPerlバージョンを使用できるというボーナスもあります。次に、ジャンクの山をインストールしたり、クレイジーなものを壊したりした場合は、そのバージョンを削除して、別のバージョンを再インストール/インストールします。

別の素晴らしいツールは cpanminus (または略してcpanm)で、これは新しい、よりユーザーフレンドリーなcpanツールです。すべてのクールな子供たちはそれを使用しています。

28
Joel Berger

次のように、cpanplus(Perlに同梱)で個々のモジュールをアンインストールできます。

cpanp uninstall SQL::Abstract

次のように、cpanスクリプトでインストールされたすべてのモジュールを表示できます。

perldoc perllocal

2つを組み合わせる:

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

「すべて」を削除するかどうかはわかりません。ただし、単一のモジュールを削除するには、 App::pmuninstall 唯一のスクリプト pm-uninstall モジュールをアンインストールします。その後、depを再帰的に削除するためのスクリプトを作成できる場合があります。

2
xenoterracide

パスに互換性のないモジュールがあるためにcpanを使用できなくなった場合は、インストールされているすべてのモジュールを手動で削除できます。たとえば、Fedora 22からFedora 23にアップグレードし、Perlのバージョンを変更しました。以前cpanmを介して/usr/local/lib64/Perl5にインストールされたすべてのモジュールが機能しなくなり、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.
...

私はそのディレクトリを移動することでこれを解決できます:

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

そのディレクトリの名前はシステムによって異なる場合があります。

Carefull:モジュールがそのディレクトリの外部にファイルをインストールした場合(システムライブラリファイルなど)、これらのファイルはそこに残ります。

1
Maikel

Flimmの回答を変更してcpanmを使用し、オプションでスクリプトの最後にcpanm自体をアンインストールします。

#!/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

最良の選択肢は、Perlをアンインストールしてから再インストールすることです。

0
DavidEG