私はいくつかのPerlスクリプトを配布しました。Perlスクリプトで使用されているすべてのモジュールを見つけてインストールするにはどうすればよいですか?
これらのスクリプトによって使用されるすべてのモジュールを検索し、インストールする最も簡単な方法は何ですか?
編集:私は何の条件が含まれていないか、試用版とその中に含まれるある見つけることができるものから、
。
私はいくつかのPerlスクリプトを配布しました。Perlスクリプトで使用されているすべてのモジュールを見つけてインストールするにはどうすればよいですか?
これらのスクリプトによって使用されるすべてのモジュールを検索し、インストールする最も簡単な方法は何ですか?
編集:私は何の条件が含まれていないか、試用版とその中に含まれるある見つけることができるものから、
。
私の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を作ることができます。
あなたに適していないものがある場合は、そのプログラムを修正してください。それが他の人にとって有益だと思うなら、プルリクエストを送ってください。 :)
まあこれは私がこれを解決し非常に単純な方法です。 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の質問に答えました。
今はきれいではありませんが、今回は仕事を終えました。
私はここに有用であろうコマンドラインユーティリティ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
を呼び出します。それはあなたにもきれいなループを与えます。私はこれを後で見ます。
このテクニックを使用して、実行時に読み込まれる依存関係を見逃すことがあります。
これは少し危険ですか? $スクリプトは何か破壊的なことをするかもしれません。 – Nifle
スクリプトを実行しようとしていませんか?この時点で、スクリプトは実行する価値があると判断し、依存関係だけが必要であると判断する必要があります。 –
私は朝3時にこれらを毎日実行するように言われました(dbメンテナンスをしています)。日中に依存関係をインストールするだけでも問題ないのかどうかは私が決めることではありません。 (そして、私は午前中に3時まで待たずに)。私はほとんどの時間これはおそらく問題ではないことに同意します。だから私は**危険なかもしれないと指摘したのです。 – Nifle
それともPAR's ppはあなたが単一の実行に必要なすべてを一緒に収集であなたのために仕事をしてみましょう。
私は 'pp'が不足している依存関係をインストールするとは思わない。私は何かが欠けている。 –
有望 – Nifle