web-dev-qa-db-ja.com

インストールされているCPANモジュールのリストを取得するにはどうすればよいですか?

試すことは別として

perldoc <module name>

私の空想やファイルシステムを調べてディレクトリを見るCPANモジュールごとに個別にインストールしたモジュールがわかりません。

インストールされているすべてのCPANモジュールの大きなリストを取得する最も簡単な方法は何ですか?コマンドラインなどから。

81

これはPerl FAQで回答されています。この答えはperldoc -q installedですぐに見つけることができます。つまり、ExtUtils::InstalledまたはFile::Findを使用することになります。これらの両方のバリアントは、このスレッドで以前に説明しました。

FAQエントリも見つけることができます 「システムにインストールされているモジュールを見つけるにはどうすればよいですか?」 perlfaq3。 perlfaq を見ると、すべてのFAQ回答のリストを見ることができます。

63
pjf
perldoc perllocal

編集: CPAN FAQ に、それに関する(少し)詳細な情報があります。

34
Dan

perldoc -q installed

cpan -lがトリックを行うと主張していますが、それは私にとってはうまくいきません。他のオプション:

cpan -a

インストールされているパッケージのNiceリストを吐き出し、それらをファイルに書き込むという素晴らしい副作用があります。

24
Paul Rubel

Perldoc perllocalは、CPAN経由でインストールされたモジュールについてのみレポートすることに注意してください。誰かがモジュールを手動でインストールした場合、それらは見つかりません。また、複数の人がモジュールをインストールしていて、perllocal.podがソース管理下にある場合、人は競合を誤って解決し、リストを破損する可能性があります(たとえば、職場でこれが発生しました)。

残念ながら、ソリューションはFile :: Findまたは類似のもので@INCを歩いているようです。ただし、モジュールを見つけるだけでなく、ディストリビューション内の関連モジュールも見つけます。たとえば、Test :: Harnessの実際のディストリビューション名に加えて、TAP :: HarnessおよびTAP :: Parserを報告します(バージョン3以降を使用している場合)。それらをディストリビューション名と一致させる可能性があり、一致しない名前を破棄できますが、ローカルに構築およびインストールされたモジュールを破棄する可能性があります。

ブライアン・d・フォイのバックパンのインデックス作成作業には、.pmファイルで渡すコードが含まれていると考えられており、ディストリビューションを推測しようとしますが、パッケージ内のものが必ずしもインストールされていないため、これでも失敗することがあります(Devel :: Coverを参照してください:: Inc for example)。

23
Ovid

ExtUtils-Installed を試すことができますが、それは.packlistsのみを見るので、人々が@INCに手で移動したモジュールを見逃す可能性があります。

私は App-Module-Lister を、非シェルWebホスティングアカウントでCGIスクリプトとしてこれを実行したい友人のために書きました。モジュールファイルを取得し、サーバーがCGIスクリプトとして扱うファイル名としてアップロードします。標準ライブラリ以外の依存関係はありません。そのまま使用するか、コードを盗みます。

モジュールとそのバージョンのリストを出力します:

 Tie :: Cycle 1.15 
 Tie :: IxHash 1.21 
 Tie :: Toggle 1.07 
 Tie :: ToObject 0.03 
 Time :: CTime 99.062201 
 Time :: DaysInMonth 99.1117 
 Time :: Epoch 0.02 
 Time :: Fuzzy 0.34 
 Time :: JulianDay 2003.1125 
 Time :: ParseDate 2006.0814 
 Time :: Timezone 2006.0814 

これをcpanツールの機能として追加するつもりだったので、私もそれを行います。 [時間の経過]そして、今、cpan-lスイッチがあります。リリースする前に他にもいくつかのことがありますが、 githubにあります です。それを待ちたくない場合は、-aスイッチを試してオートバンドルを作成することができますが、これによりリストの周りにポッドが配置されます。

幸運を;

19
brian d foy
$ for M in `perldoc -t perllocal|grep Module |sed -e 's/^.*" //'`; do V=`perldoc -t perllocal|awk "/$M/{y=1;next}y" |grep VERSION |head -n 1`; printf "%30s %s\n" "$M" "$V"; done |sort
              Class::Inspector     *   "VERSION: 1.28"
                    Crypt::CBC     *   "VERSION: 2.33"
               Crypt::Rijndael     *   "VERSION: 1.11"
                    Data::Dump     *   "VERSION: 1.22"
                   DBD::Oracle     *   "VERSION: 1.68"
                           DBI     *   "VERSION: 1.630"
                   Digest::SHA     *   "VERSION: 5.92"
           ExtUtils::MakeMaker     *   "VERSION: 6.84"
                       install     *   "VERSION: 6.84"
               IO::SessionData     *   "VERSION: 1.03"
               IO::Socket::SSL     *   "VERSION: 2.016"
                          JSON     *   "VERSION: 2.90"
                  MIME::Base64     *   "VERSION: 3.14"
                  MIME::Base64     *   "VERSION: 3.14"
                   Mozilla::CA     *   "VERSION: 20141217"
                   Net::SSLeay     *   "VERSION: 1.68"
                        parent     *   "VERSION: 0.228"
                  REST::Client     *   "VERSION: 271"
                    SOAP::Lite     *   "VERSION: 1.08"
                  Task::Weaken     *   "VERSION: 1.04"
                 Term::ReadKey     *   "VERSION: 2.31"
                Test::Manifest     *   "VERSION: 1.23"
                  Test::Simple     *   "VERSION: 1.001002"
                  Text::CSV_XS     *   "VERSION: 1.16"
                     Try::Tiny     *   "VERSION: 0.22"
                   XML::LibXML     *   "VERSION: 2.0108"
         XML::NamespaceSupport     *   "VERSION: 1.11"
                XML::SAX::Base     *   "VERSION: 1.08"
17
Dan

トリックを実行するスクリプトを次に示します。

 use ExtUtils::Installed;

 my $inst = ExtUtils::Installed->new();
 my @modules = $inst->modules();
 foreach $module (@modules){
        print $module ." - ". $inst->version($module). "\n";
 }

=head1 ABOUT

This scripts lists installed cpan modules using the ExtUtils modules

=head1 FORMAT

Prints each module in the following format
<name> - <version>

=cut
10
Joakim

これにはCPANの 'r'コマンドを使用します。古いスタイルでCPANシェルにアクセスできます。

Sudo Perl -MCPAN -e Shell

または、ほとんどの新しいシステムには「cpan」コマンドがあるため、このコマンドでシェルにアクセスできます。

Sudo cpan

(通常、「sudo」を使用してrootとして実行するか、「su-」を使用して実行する前にrootになる必要があります。ただし、通常のユーザーとして実行できるようにcpanを設定し、rootとしてインストールします。このマシンにルートがない場合でも、CPANシェルを使用してこの情報を確認できますが、モジュールをインストールすることはできず、初めてセットアップを行う必要がある場合がありますそれを実行します。)

次に、cpanシェルを開いたら、「r」コマンドを使用して、インストールされているすべてのモジュールとそのバージョンを報告できます。そのため、「cpan>」プロンプトで「r」と入力します。これにより、インストールされているすべてのモジュールとそのバージョンが一覧表示されます。つかいます '?'さらに助けを得るために。

9
amoore

* nixでそれを行うための本当にハックな方法があります、あなたはあなたが本当に気にしないものを手に入れるでしょう(すなわち:warnings :: register etc)、しかしそれはあなたにアクセスできるすべての.pmファイルのリストを与えるべきですPerl。


for my $path (@INC) {
    my @list = `ls -R $path/**/*.pm`;
    for (@list) {
        s/$path\///g;
        s/\//::/g;
        s/\.pm$//g;
        print;
    }
}
6
shelfoo

ターミナルでinstmodshコマンドを使用すると、システムにインストールされているPerlモジュールのリストを取得できます。出力を強化するために、次の3つのオプションが要求されます。

   l            - List all installed modules
   m <module>   - Select a module
   q            - Quit the program
6
Thiyagu ATR
Perl -MFile::Find=find -MFile::Spec::Functions -Tlwe 'find { wanted => sub { print canonpath $_ if /\.pm\z/ }, no_chdir => 1 }, @INC'
5
slayedbylucifer

答えは Perl FAQリスト にあります。

Perlに付属の優れたドキュメントをざっと読んでください。

perldoc perltoc
2
Sinan Ünür

man perllocalまたはperldoc perllocalを試してください。

2
Walter H

次のコマンドを試してください

instmodsh

2
user2024286

Linux/Unixでは、次の簡単なコマンドを使用します。

Perl -e 'print qx/find $_ -name "*.pm"/ foreach ( @INC );' 

@INC内のすべてのフォルダーをスキャンし、*。pmファイルを探します。

2

Ls(1)などの外部プログラムを使用せずに@INCディレクトリツリーをウォークスルーするには、Nice宣言インターフェイスを備えたFile::Find::Ruleモジュールを使用できます。

また、以前のPerlバージョンに同じモジュールが含まれている場合に備えて、重複を除外する必要があります。これを行うコードは次のようになります。

#! /usr/bin/Perl -l

use strict;
use warnings;
use File::Find::Rule;

my %seen;
for my $path (@INC) {
    for my $file (File::Find::Rule->name('*.pm')->in($path)) {
        my $module = substr($file, length($path)+1);
        $module =~ s/.pm$//;
        $module =~ s{[\\/]}{::}g;
        print $module unless $seen{$module}++;
    }
}

実行の最後には、すべてのモジュール名がキーとして%seenハッシュに含まれています。コードは、正規のファイル名($ fileで指定)を、表示回数の代わりにキーの値として保存するように適合させることができます。

1
dland

ちょうど昨日、まさにこれを行うためにPerlスクリプトを書きました。このスクリプトは、区切り文字として「::」を使用して、@ INCにインストールされているPerlモジュールのリストを返します。 -を使用してスクリプトを呼び出します

Perl perlmod.pl

OR

Perl perlmod.pl <module name> #Case-insensitive(eg. Perl perlmod.pl ftp)

現在のところ、ソフトリンクの再帰に問題があるため、スクリプトは現在のディレクトリ( '。')をスキップしますが、17行目のgrep関数を変更することで含めることができます

  grep { $_ !~ '^\.$' } @INC

ただ、

@INC

スクリプトは こちら にあります

1
aks

インストールされたモジュールのリストを出力するPerlのワンライナーは次のとおりです。

Perl -MExtUtils::Installed -MData::Dumper -e  'my ($inst) = ExtUtils::Installed->new(); print Dumper($inst->modules());'

Data :: Dumperがインストールされていることを確認してください。

1
thealexbaron

ここに、インストールされているすべての.pmファイルを一覧表示する別のコマンドラインツールがあります。

正規表現に一致するインストール済みPerlモジュールを見つける

  • ポータブル(コアモジュールのみを使用)
  • ルックアップを高速化するキャッシュオプション
  • 設定可能な表示オプション
1
toolic

Perlスクリプトを入力すると、@ INCのフォルダーの下に.pmファイルとしてインストールされたすべてのモジュールがあるので、小さなbashスクリプトがあなたのために仕事をします:

#!/bin/bash

echo -e -n "Content-type: text/plain\n\n"

inc=`Perl -e '$, = "\n"; print @INC;'`

for d in $inc
do
   find $d -name '*.pm'
done
0
Henrik

次は私のために働いた。

$ perldoc perllocal | grep Module
$ perldoc perllocal | grep -E 'VERSION|Module'
0
caot

perlクックブックには、必要な処理を行うスクリプト「pmdesc」の反復がいくつか含まれています。 「Perl Cookbook pmdesc」をGoogleで検索すると、 他のQ&Aサイトの記事 、ネット上のいくつかのコードリスト、解決策の議論、さらには 一部の改良 =。

0
knb
cd /the/lib/dir/of/your/Perl/installation
perldoc $(find . -name perllocal.pod)

Windowsユーザーは、Windowsエクスプローラー検索を実行するだけで検索できます。

0
mpersico