How do I tell CPAN to install all dependencies?

如何告诉 CPAN 安装所有依赖项?

I tried setting these in cpan:

cpan> o conf prerequisites_policy follow
cpan> o conf commit

我还是不得不回答“ y”几次(但比之前感觉的要少)。

Is there a way to get it to always go ahead and install? I want to make it unattended.

似乎我希望一个标志总是信任 CPAN 做正确的事情,如果它建议一个答案,我想遵循它(总是按 Enter当它问一些事情)。

103441 次浏览

预备

prerequisites_policy

在配置中。

See Config Variables.

Maybe it's related to 自动安装 or 模块: : 自动安装 being used. Try setting the PERL_AUTOINSTALL environment variable. (Cf. the documentation of those modules.)

就我个人而言,我只尝试过几次以这种方式修改设置,实际上我发现通过不给 cpan任何参数,然后在交互式提示符下配置 CPAN.pm,更容易进入 CPAN.pm shell:

$ cpan
cpan> o conf init

这将启动 CPAN.pm接口配置实用程序。简单地浏览一遍,然后指定“ follow”到你需要的地方(我一下子就忘了这个问题) ,然后你就可以开始了。

试着这样设置 PERL _ MM _ USE _ DEFAULT:

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

它应该使 CPAN 回答所有提示的默认值。

我很确定你要找的是这个:

cpan> o conf prerequisites_policy follow
cpan> o conf commit

Changing the following parameter on top of prerequisites_policy follows.

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

这将把它从“询问/是”改为“是”,并停止询问你。

这个问题的最新和最好的答案是使用 cpanm代替(也称为应用程序: : cpan减或 cpan减) !

描述

Cpanminis 是一个脚本,可以从中获取、解压、构建和安装模块 CPAN,不做其他任何事情。

它是无依赖的(可以引导 ) ,需要零配置,并且独立运行, 它只需要10MB 内存。

要引导安装它:

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

或者只是简单地使用 perlbrew

perlbrew install-cpanm

或者来自 cpan 本身:

cpan install App::cpanminus

From then on install modules by executing (as root if necessary)

cpanm Foo::Bar

下面是使这些变化永久化的一行程序,包括自动的第一次 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'

Or combine it with local::lib module for non-privileged users:

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 shell 之前运行它。

到目前为止,我发现这是安装 CPAN 模块最快、最可靠的方法:

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

我写这篇文章是为了帮助那些可能来到这个页面寻找安装特定 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";
}
}
}

这将使用 cpanmin 来安装脚本所需的所有模块依赖项。如果 cpanm 没有安装,它将安装它。