Как я могу сказать CPAN для установки всех зависимостей?
Я попытался установить их в cpan
:
cpan> o conf prerequisites_policy follow
cpan> o conf commit
Мне все равно приходилось отвечать "y" пару раз (но меньше, чем раньше).
Есть ли способ заставить его всегда идти вперед и устанавливать? Я хочу сделать это без присмотра.
Казалось бы, я хочу, чтобы флаг всегда доверял CPAN, чтобы делать правильные вещи, и если он предлагает ответ, я хотел бы следовать ему (всегда нажимайте Enter, когда он что-то спрашивает).
Ниже приведено однострочное изменение этих изменений, включая автоматическую настройку конфигурации 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 или что-то еще.
Попробуйте установить PERL_MM_USE_DEFAULT так:
PERL_MM_USE_DEFAULT=1 perl -MCPAN -e 'install My::Module'
Он должен заставить CPAN отвечать на все запросы по умолчанию.
export PERL_MM_USE_DEFAULT=1
в ваш ~ / .bashrc
Последний и самый лучший ответ на этот вопрос - использовать cpanm
(также называемый App:: cpanminus или cpanminus)!
ОПИСАНИЕ
cpanminus - это script для получения, распаковки, сборки и установки модулей из CPAN и ничего не делает.
Это зависимость бесплатно (может загружаться) сам), требует нулевой конфигурации и стоит отдельно. При работе, он требует только 10 МБ ОЗУ.
Чтобы загрузить его, выполните следующие действия:
curl -L http://cpanmin.us | perl - --sudo App::cpanminus
или если вы используете perlbrew
просто
perlbrew install-cpanm
или из самого cpan:
cpan install App::cpanminus
С этого момента установите модули, выполнив (при необходимости, root)
cpanm Foo::Bar
cpanm
, поэтому cpanm
использовать ее здесь не является решением.
Далее следует следующий параметр в верхней части предпосылки_policy.
cpan> o conf prerequisites_policy 'follow'
cpan> o conf build_requires_install_policy yes
cpan> o conf commit
Это изменит его с "ask/yes" на "yes" и перестанет спрашивать вас.
Здесь я уверен, что вы ищете:
cpan> o conf prerequisites_policy follow
cpan> o conf commit
Возможно, это связано с ExtUtils:: AutoInstall или Module:: AutoInstall. Попробуйте установить переменную среды PERL_AUTOINSTALL. (См. Документацию этих модулей.)
Лично я попробовал пару раз, чтобы изменить настройки таким образом и на самом деле было проще сбрасывать в оболочку CPAN.pm
, предоставляя cpan
никаких аргументов, а затем настраивая CPAN.pm
из интерактивной подсказки
$ cpan
cpan> o conf init
Это приведет к запуску утилиты конфигурирования интерфейсов CPAN.pm
. Просто пройдите через него и укажите "следовать" там, где вам нужно (я забыл вопрос заранее), и вам должно быть хорошо идти.
init
. Например, o conf init prerequisites_policy
. Таким образом, вам не нужно проходить долгий процесс инициализации, но вы все равно получите дружественную подсказку для нужного параметра
Я нашел, что это, безусловно, самый быстрый и надежный способ установки модулей CPAN:
yes | perl -MCPAN -e "CPAN::Shell->notest(qw!install Your::Module!)"
yes|/root/bin/perl -MCPAN -e "CPAN::Shell->notest(qw!install Your::Module!)"
Я пишу это для людей, которые, возможно, пришли на эту страницу, чтобы найти способ установки всех зависимостей модулей, необходимых для конкретного perl script. Я написал для этого script:
Он должен быть запущен как ./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 для установки всех зависимостей модулей, необходимых вашему script. Если cpanm не установлен, он установит его.