122

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

我尝试将这些设置为cpan

cpan> o conf prerequisites_policy follow
cpan> o conf commit

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

有没有办法让它总是继续安装?我想让它无人看管。

似乎我想要一个标志来始终信任 CPAN 做正确的事情,如果它建议一个答案,我想遵循它(Enter当它问什么时总是点击它)。

4

10 回答 10

83

尝试像这样设置 PERL_MM_USE_DEFAULT:

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

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

于 2009-06-10T20:33:51.267 回答
60

这个问题的最新和最好的答案是使用cpanm(也称为 App::cpanminus 或 cpanminus)!

描述

cpanminus 是一个从 CPAN 获取、解包、构建和安装模块的脚本,它什么也不做。

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

要引导安装它:

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

或者如果您只是perlbrew使用

perlbrew install-cpanm

或来自 cpan 本身:

cpan install App::cpanminus

从那时起,通过执行安装模块(必要时以 root 身份)

cpanm Foo::Bar
于 2011-10-31T02:09:45.117 回答
34

这是使这些更改永久化的单线,包括自动首次 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 shell 或其他任何东西之前运行它。

于 2014-02-12T18:18:11.050 回答
31

在prerequisites_policy 之上更改以下参数。

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

这会将它从“询问/是”更改为“是”并停止询问您。

于 2010-01-14T16:20:14.567 回答
28

这就是我很确定您正在寻找的内容:

cpan> o conf prerequisites_policy follow
cpan> o conf commit
于 2009-12-18T23:24:51.440 回答
6

prerequisites_policy

在配置中。

请参阅配置变量

于 2009-05-22T16:52:02.837 回答
6

也许它与正在使用的ExtUtils::AutoInstallModule::AutoInstall有关。尝试设置 PERL_AUTOINSTALL 环境变量。(参见这些模块的文档。)

于 2009-05-22T18:41:45.843 回答
3

就我个人而言,我只尝试过几次以这种方式修改设置,并且实际上发现通过不提供任何参数,然后从交互式提示进行配置更容易进入CPAN.pmshell :cpanCPAN.pm

$ cpan
cpan> o conf init

这将启动CPAN.pm接口配置实用程序。只需运行它并指定“跟随”你需要的地方(我忘记了这个问题),你应该很高兴。

于 2009-05-23T00:41:58.727 回答
3

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

yes | perl -MCPAN -e "CPAN::Shell->notest(qw!install Your::Module!)"
于 2015-07-29T14:08:59.990 回答
3

我写这篇文章是为了帮助那些可能来到这个页面的人,他们正在寻找一种方法来安装特定 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,它将安装它。

于 2017-08-02T19:48:57.510 回答