2009-08-20 3 views
6

私はいくつかのPerlスクリプトを配布しました。Perlスクリプトで使用されているすべてのモジュールを見つけてインストールするにはどうすればよいですか?

これらのスクリプトによって使用されるすべてのモジュールを検索し、インストールする最も簡単な方法は何ですか?

編集:私は何の条件が含まれていないか、試用版とその中に含まれるある見つけることができるものから、

答えて

10

私のModule::Extract::Useは役に立ちますか? extract_modules programディレクトリにあります:

$ examples/extract_modules -l some_program 
File::Spec 
File::Spec::Functions 
strict 
warning 

あなたはcpanにパイプを一覧表示することができます。

$ examples/extract_modules -l some_program | xargs cpan 

あなたは依存関係の最初のレベルのみで、そのリストを、持っていたら、あなたは人々がすべてをインストールするために、通常のCPANツールチェーンを使用することができますscript distributionを作ることができます。

あなたに適していないものがある場合は、そのプログラムを修正してください。それが他の人にとって有益だと思うなら、プルリクエストを送ってください。 :)

+0

有望 – Nifle

1

まあこれは私がこれを解決し非常に単純な方法です。 bashシェルで

cat *.pl | grep "^use " | tr ';' ' ' | while read a b c; do echo $b; done | sort -iu > modules.txt 

は、これが私の唯一のモジュール名、1行に1つずつのファイルを与えました。

私は、ファイル内の各モジュール名にCPANを起動するには、この

cat modules.txt | while read a; do cpan $a; done 

を使用。そして、必要に応じて依存関係をインストールするためにCPANの質問に答えました。

今はきれいではありませんが、今回は仕事を終えました。

+0

どのように使用されていませんが、require'dされているモジュールについては? – innaM

+0

私はそれに応じて最初の行のgrepを調整したい – Nifle

+0

'use'が行の最初のものではない行についてはどうですか?オプションのスペースも許可しません。 –

3

私はここに有用であろうコマンドラインユーティリティscandeps.plを提供Module::ScanDepsを期待していたが、私の狼狽に、Module::ScanDepsが明らかにscandeps.plとして、この特定の目的のために意図されていないのいずれかのモジュールを欠落しているか(-cまたは-x付き)を無視は、いつcroaksスクリプトは、インストールされていないモジュールを使用します。ここで

は、それが成功するまでdoを使用してスクリプトを実行しようとquick'n'dirty Perlスクリプトです:

#!/usr/bin/perl 

use strict; 
use warnings; 

use Term::Prompt; 

my ($script) = @ARGV; 

die "Provide script file name on the command line\n" 
    unless defined $script; 

until (do $script) { 
    my $ex = [email protected]; 
    if (my ($file) = $ex =~ /^Can't locate (.+?) in/) { 
     my $module = $file; 
     $module =~ s/\.(\w+)$//; 
     $module = join('::', split '/', $module); 
     print "Attempting to install '$module' via cpan\n"; 
     system(cpan => $module); 
     last unless prompt(y => 'Try Again?', '', 'n'); 
    } 
    else { 
     die $ex; 
    } 
} 

スクリプトを実行したくない場合は、あなたがperl -c $scriptを実行することができ、キャプチャstderrを出力し、見つからないモジュールメッセージを解析し、perl -c $scriptが "Syntax OK"を出力するまで、このようなモジュールごとにcpanを呼び出します。それはあなたにもきれいなループを与えます。私はこれを後で見ます。

このテクニックを使用して、実行時に読み込まれる依存関係を見逃すことがあります。

+1

これは少し危険ですか? $スクリプトは何か破壊的なことをするかもしれません。 – Nifle

+1

スクリプトを実行しようとしていませんか?この時点で、スクリプトは実行する価値があると判断し、依存関係だけが必要であると判断する必要があります。 –

+0

私は朝3時にこれらを毎日実行するように言われました(dbメンテナンスをしています)。日中に依存関係をインストールするだけでも問題ないのかどうかは私が決めることではありません。 (そして、私は午前中に3時まで待たずに)。私はほとんどの時間これはおそらく問題ではないことに同意します。だから私は**危険なかもしれないと指摘したのです。 – Nifle

0

それともPAR's ppはあなたが単一の実行に必要なすべてを一緒に収集であなたのために仕事をしてみましょう。

+0

私は 'pp'が不足している依存関係をインストールするとは思わない。私は何かが欠けている。 –

関連する問題