82

私はユーザースペースで実行されているPerlを使用しており(root経由ではインストールされていません)、コマンドライン経由でモジュールをインストールしていますcpan。個々のファイルを削除するために多くの作業を行うことなく、モジュールを削除する簡単な方法があるかどうかを知りたいです。

私はインターネットでこの質問を検索し、いくつかの答えを見つけましたが、私が見つけた答えは、Perlパッケージマネージャー(Microsoft Windowsに固有)の使用について議論しているようです。そうでない場合は、オペレーティングシステム固有(BSDpan)であり、cpanplus(私は)でいくつかの悪い経験をしたか、次のようにデッドリンクを指すことで終了しました:http://www.cpan.org/misc/cpan-faq.html#How_delete_Perl_modules

私の質問は、具体的には、を介してインストールされたモジュールを削除するクリーンな方法があるかどうかですcpan

4

6 に答える 6

65
  1. App::cpanminusCPANからインストールします(これには:cpan App::cpanminusを使用します)。
  2. cpanm --uninstall Module::Name「 」と入力して、 cpanminusmを使用してモジュールをアンインストールします。

これは機能するはずです。

于 2015-04-06T09:23:21.733 に答える
47

できません。私のCPANクライアントにはそのようなことをする機能はありません。私たちは今週末のPerlQAワークショップでそのようなことをどのように行うかについて話していましたが、Etherが言及したすべての理由から一般的に難しいです。

于 2010-04-13T06:50:49.163 に答える
31

原則として、CPANモジュールに付属する特定の「アンインストール」メカニズムはありません。ただし、一部のパッケージにはインストールスクリプトにこのディレクティブが含まれているmake uninstallため、モジュールが解凍された元のディレクトリで試してみることができます(これは多くの場合/root/.cpanまたはの下にあります)。~/.cpan(ただし、モジュールをローカル(ルート以外)のライブラリディレクトリにインストールしたので、このディレクトリ全体を吹き飛ばして、保持したい他のすべてを再インストールすることもできます。)

多くの場合、perllibからA/B.pm(モジュール用の)ファイルを削除するだけで簡単に回避できます。これにより、少なくともモジュールが使用できなくなります。A::Bほとんどのモジュールには、インストールするファイルのリスト(「マニフェスト」と呼ばれる)も含まれているため、それが見つかった場合は、削除できるファイルがわかります。

ただし、これらのアプローチはいずれも、依存関係としてインストールされたモジュールには対応していません。他の何かがそのモジュールに依存しているかどうかを知る良い(自動化された)方法はないので、確信が持てたら手動でアンインストールする必要があります。

モジュールのアンインストールの難しさは、多くのPerl開発者がインストールを追跡するためにリビジョン管理システムを使用する方向に進んでいる理由の1つです。

于 2010-04-13T02:09:49.863 に答える
25

モジュールをアンインストールしようとするCPANのスクリプトがあります:

ExtUtils :: Packlistは、サンプルモジュールの削除コードを示していますmodrm

于 2012-06-25T04:50:41.197 に答える
19

2013年の更新:このコードは廃止されました。代わりに、 bsbの今後の回答に賛成してください。


モジュールを頻繁にアンインストールする必要はありませんが、.packlistファイルベースのアプローチでこれまで失敗したことはありません。

use 5.010;
use ExtUtils::Installed qw();
use ExtUtils::Packlist qw();

die "Usage: $0 Module::Name Module::Name\n" unless @ARGV;

for my $mod (@ARGV) {
    my $inst = ExtUtils::Installed->new;

    foreach my $item (sort($inst->files($mod))) {
        say "removing $item";
        unlink $item or warn "could not remove $item: $!\n";
    }

    my $packfile = $inst->packlist($mod)->packlist_file;
    print "removing $packfile\n";
    unlink $packfile or warn "could not remove $packfile: $!\n";
}
于 2010-04-13T08:04:51.200 に答える
2

モジュールのインストール時に、主に対応する.pmファイルをそれぞれのディレクトリに配置します。したがって、テスト目的でのみ、または一時的に最適な方法でモジュールを削除する場合は、を使用してモジュールが保存されているパスを見つけ、perldoc -l <MODULE>そこから別の場所にモジュールを移動するだけです。このアプローチは、より永続的な解決策として試すこともできますが、主にテストのために行うので、悪影響を認識していません。

于 2015-05-21T05:44:09.673 に答える