CPANにすべての依存関係をインストールするように指示するにはどうすればよいですか?


113

CPANにすべての依存関係をインストールするように指示するにはどうすればよいですか?

私はこれらを設定してみましたcpan

cpan> o conf prerequisites_policy follow
cpan> o conf commit

私はまだ「y」に2、3回答えなければなりませんでした(しかし、それが感じられる前は少なくなりました)。

常に先に進んでインストールする方法はありますか?無人にしたいです。

私はフラグが常にCPANが正しいことをすることを信頼するようにしたいようです、そしてそれが答えを示唆するならば、私はそれに従いたいです(Enterそれが何かを尋ねるときは常にヒットします)。


1
おそらく、CPAN.pm設定に基づいて自動インストール環境変数を設定する機能をcpanスクリプトに追加する必要があります。問題の残りの半分であるtseeの回答を参照してください。
ブライアン・ド・フォイ2009年

回答:


30

以下は、初回の自動CPAN構成を含め、これらの変更を永続化するワンライナーです。

perl -MCPAN -e 'my $c = "CPAN::HandleConfig"; $c->load(doit => 1, autoconfig => 1); $c->edit(prerequisites_policy => "follow"); $c->edit(build_requires_install_policy => "yes"); $c->commit'

またはlocal::lib、非特権ユーザー向けのモジュールと組み合わせます。

perl -MCPAN -Mlocal::lib=~/perl5 -e 'my $c = "CPAN::HandleConfig"; $c->load(doit => 1, autoconfig => 1); $c->edit(prerequisites_policy => "follow"); $c->edit(build_requires_install_policy => "yes"); $c->commit'

CPANシェルなどを使用する前に実行してください。


@sdf anwerと同じではありませんか?
filimonov 2016

83

次のようにPERL_MM_USE_DEFAULTを設定してみてください:

PERL_MM_USE_DEFAULT=1 perl -MCPAN -e 'install My::Module'

これにより、CPANはすべてのプロンプトに対してデフォルトで応答します。


これを永続化する方法はありますので、毎回cpanに「install My:Module」と入力するだけで、これが記憶されますか?Config.pmを編集しますか?
Geoff

3
Linuxを使用している場合は、行export PERL_MM_USE_DEFAULT=1を〜/ .bashrc に追加します
andersand

1
エラーが発生した場合はCan't locate object method "install" via package "xxx" at -e line 1.、モジュール名の直前に「+」を追加してください。
Yann Sagon 2014年

55

この質問に対する最新かつ最大の答えは、cpanm代わりに使用することです(App :: cpanminusまたはcpanminusとも呼ばれます)。

説明

cpanminusは、CPANからモジュールを取得、アンパック、ビルド、およびインストールするためのスクリプトであり、他には何もしません。

それは依存関係がなく(それ自体をブートストラップできます)、構成が不要で、スタンドアロンです。実行時に必要なRAMは10MBだけです。

ブートストラップをインストールするには、それをインストールします。

curl -L http://cpanmin.us | perl - --sudo App::cpanminus

またはperlbrew単に使用している場合

perlbrew install-cpanm

またはcpan自体から:

cpan install App::cpanminus

その後、(必要に応じてrootとして)を実行してモジュールをインストールします。

cpanm Foo::Bar

1
を使用するcpanmとこの問題が発生するため、使用するように指示しても解決策はありません。
reinierpost 2015年

3
ブラインドコメントではなく、新しい質問として質問して、ここにリンクしてください。権限の問題があなたの問題かもしれないと思います
Joel Berger

Ubuntu 18.04では、でインストールしましたsudo apt install cpanminus make
Pablo A

反対票。curlの出力を実行することをお勧めしません。
Richard Smith

28

これがあなたが探していると確信しているものです。

cpan> o conf prerequisites_policy follow
cpan> o conf commit

27

prerequisites_policyに加えて次のパラメーターを変更します。

cpan> o conf prerequisites_policy 'follow'
cpan> o conf build_requires_install_policy yes
cpan> o conf commit

これにより、「質問/はい」から「はい」に変更され、質問を停止します。


ありがとう!何度も尋ねられないように、これら2つのオプションが必要です。
Dat TT

これらは、これらの設定のデフォルト値であることに注意してください。
池上2017年


6

セットする

prerequisites_policy

構成で。

Config Variablesを参照してください。


2
プロンプトはモジュールソースのダウンロードに関連していますか?その場合は、connect_to_internet_okオプションを参照してください。それ以外の場合は、回避しようとしている他のプロンプトを教えてください。
SinanÜnür、2009年

基本的に、これらの最後のものは「オプションのモジュール」でした。
ニフレ2009年

問題は、自分で自動インストールすることです。CPAN.pmはそのようなものを処理する機会がありません。tseeの回答を参照してください。
ブライアン・ド・フォイ2009年

1
リンクが
停止

3

個人的に私はこの方法で設定を変更するために数回試してみましたが、実際には引数を指定せずに対話型プロンプトから構成CPAN.pmすることでシェルにドロップする方が簡単であることがわかりました:cpanCPAN.pm

$ cpan
cpan> o conf init

これにより、CPAN.pmインターフェース設定ユーティリティが起動します。単にそれを実行して、必要な場所で「フォロー」を指定します(私は質問をオフハンドで忘れます)。これで問題ありません。


特定の設定をに渡すことができますinit。たとえば、o conf init prerequisites_policy。こうすることで、長い初期化プロセスを実行する必要はありませんが、問題の設定に対して
わかりやすい

3

これは、CPANモジュールをインストールするための最も迅速で信頼性の高い方法であることがわかりました。

yes | perl -MCPAN -e "CPAN::Shell->notest(qw!install Your::Module!)"

これは質問には答えません-OPは、依存関係を自動的にインストールする方法/プロンプトに自動的に応答する方法を求めています。
William Turrell、2015

実際、依存関係をインストールし、プロンプトに自動的に応答します。今も含めてずっと使っています。しかし、小規模な変更の必要性がある: yes|/root/bin/perl -MCPAN -e "CPAN::Shell->notest(qw!install Your::Module!)"
ブラディミール・マーチェンコ

yes」は何をすべきですか?
Peter Mortensen

2

これは、特定のperlスクリプトに必要なすべてのモジュール依存関係をインストールする方法を探して、このページにアクセスした可能性のある人々のために書いています。そのためのスクリプトを書きました。

次のように実行する必要があります ./installdep.pl yourscript.pl

#!/usr/bin/perl
`sudo apt install cpanminus`;
while (<>) {
    if (/USE /i)
    {
        my $line=$_;
        $line=~ s/\s//g;
        $line=~ /^(.*)\./;
        $line=~ s/\;//;
        $line=~s/^USE//i;
        $line=~s/lib.*//i;
        $line=~s/feature.*//i;
        $line=~s/strict//i;
        $line=~s/warnings//i;
        $line =~ s/^(.*)\(.*/$1/;
        unless ($line eq '') {
        my $cmd='sudo cpanm '.$line;
        print "Installing $line \n";
        open my $cmd_fh, "$cmd |";
        while (<$cmd_fh>) {
          print "$_";
        }
        close $cmd_fh;
        print "\n";
    }
    }
}

これはcpanminusを使用して、スクリプトに必要なすべてのモジュールの依存関係をインストールします。cpanmがインストールされていない場合は、インストールされます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.