我如何告诉CPAN安装所有的依赖关系?
我如何告诉CPAN安装所有的依赖关系?
我尝试在cpan
设置这些:
cpan> o conf prerequisites_policy follow cpan> o conf commit
我仍然不得不回答“Y”几次(但比之前感觉更less)。
有没有办法让它总是前进和安装? 我想使它无人看pipe。
似乎我想要一个国旗总是相信CPAN做正确的事情,如果它提出了一个答案,我想遵循它(总是在要求什么的时候按Enter键 )。
以下是使这些更改永久的单线程包括自动首次CPANconfiguration:
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之前运行它。
尝试像这样设置PERL_MM_USE_DEFAULT:
PERL_MM_USE_DEFAULT=1 perl -MCPAN -e 'install My::Module'
它应该使CPAN回答默认的所有提示。
这个问题的最新和最好的答案是使用cpanm
而不是(也称为App :: cpanminus或cpanminus)!
描述
cpanminus是一个脚本,可以从CPAN中获取,解压缩,构build和安装模块,而不需要做任何事情。
它是无依赖的(可以引导自己),需要零configuration,并独立。 运行时,只需要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> o conf prerequisites_policy follow cpan> o conf commit
更改prerequisites_policy之上的以下参数。
cpan> o conf prerequisites_policy 'follow' cpan> o conf build_requires_install_policy yes cpan> o conf commit
这会将其从“询问/是”更改为“是”,并停止询问您。
也许它与ExtUtils :: AutoInstall或Module :: AutoInstall被使用有关。 尝试设置PERL_AUTOINSTALL环境variables。 (参考这些模块的文档。)
组
prerequisites_policy
在configuration中。
请参阅configurationvariables 。
就我个人而言,我只尝试了几次,以这种方式修改设置,实际上已经发现通过给cpan
无参数,然后从交互式提示中configurationCPAN.pm
,可以更容易地放入CPAN.pm
shell:
$ cpan cpan> o conf init
这将启动CPAN.pm
接口configuration实用程序。 简单地通过它,并指定“跟随”你需要的地方(我忘记了这个问题),你应该很好去。
到目前为止,我发现这是安装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未安装,它将安装它。