如何告诉 CPAN 安装所有依赖项?
我尝试将这些设置为cpan
:
cpan> o conf prerequisites_policy follow
cpan> o conf commit
我仍然不得不回答“y”几次(但比之前感觉要少)。
有没有办法让它总是继续安装?我想让它无人看管。
似乎我想要一个标志来始终信任 CPAN 做正确的事情,如果它建议一个答案,我想遵循它(Enter当它问什么时总是点击它)。
如何告诉 CPAN 安装所有依赖项?
我尝试将这些设置为cpan
:
cpan> o conf prerequisites_policy follow
cpan> o conf commit
我仍然不得不回答“y”几次(但比之前感觉要少)。
有没有办法让它总是继续安装?我想让它无人看管。
似乎我想要一个标志来始终信任 CPAN 做正确的事情,如果它建议一个答案,我想遵循它(Enter当它问什么时总是点击它)。
尝试像这样设置 PERL_MM_USE_DEFAULT:
PERL_MM_USE_DEFAULT=1 perl -MCPAN -e 'install My::Module'
它应该使 CPAN 默认回答所有提示。
这个问题的最新和最好的答案是使用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
这是使这些更改永久化的单线,包括自动首次 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 或其他任何东西之前运行它。
在prerequisites_policy 之上更改以下参数。
cpan> o conf prerequisites_policy 'follow'
cpan> o conf build_requires_install_policy yes
cpan> o conf commit
这会将它从“询问/是”更改为“是”并停止询问您。
这就是我很确定您正在寻找的内容:
cpan> o conf prerequisites_policy follow
cpan> o conf commit
也许它与正在使用的ExtUtils::AutoInstall或Module::AutoInstall有关。尝试设置 PERL_AUTOINSTALL 环境变量。(参见这些模块的文档。)
就我个人而言,我只尝试过几次以这种方式修改设置,并且实际上发现通过不提供任何参数,然后从交互式提示进行配置更容易进入CPAN.pm
shell :cpan
CPAN.pm
$ cpan
cpan> o conf init
这将启动CPAN.pm
接口配置实用程序。只需运行它并指定“跟随”你需要的地方(我忘记了这个问题),你应该很高兴。
到目前为止,我发现这是安装 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";
}
}
}
这将使用 cpanminus 安装脚本所需的所有模块依赖项。如果没有安装 cpanm,它将安装它。