Как мне сказать CPAN установить все зависимости?

107

Как я могу сказать CPAN для установки всех зависимостей?

Я попытался установить их в cpan:

cpan> o conf prerequisites_policy follow
cpan> o conf commit

Мне все равно приходилось отвечать "y" пару раз (но меньше, чем раньше).

Есть ли способ заставить его всегда идти вперед и устанавливать? Я хочу сделать это без присмотра.

Казалось бы, я хочу, чтобы флаг всегда доверял CPAN, чтобы делать правильные вещи, и если он предлагает ответ, я хотел бы следовать ему (всегда нажимайте Enter, когда он что-то спрашивает).

  • 1
    Возможно, мне следует добавить функцию в мой скрипт cpan для установки переменных среды автоматической установки на основе параметра CPAN.pm. Смотрите ответ tsee, который является другой половиной проблемы.
Теги:
dependencies
cpan

10 ответов

28
Лучший ответ

Ниже приведено однострочное изменение этих изменений, включая автоматическую настройку конфигурации 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 или что-то еще.

  • 0
    разве это не то же самое, что в @sdf anwer?
80

Попробуйте установить PERL_MM_USE_DEFAULT так:

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

Он должен заставить CPAN отвечать на все запросы по умолчанию.

  • 0
    Любой способ сделать это постоянным, так что вы можете просто каждый раз вводить «установить My: Module» в cpan, и он запомнит это? Изменить Config.pm?
  • 3
    Если вы работаете в linux, добавьте строку export PERL_MM_USE_DEFAULT=1 в ваш ~ / .bashrc
Показать ещё 1 комментарий
47

Последний и самый лучший ответ на этот вопрос - использовать 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
  • 0
    Я также рекомендую cpanm ... + 1!
  • 0
    У меня есть эта проблема, когда я использую cpanm , поэтому cpanm использовать ее здесь не является решением.
Показать ещё 2 комментария
27

Далее следует следующий параметр в верхней части предпосылки_policy.

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

Это изменит его с "ask/yes" на "yes" и перестанет спрашивать вас.

  • 0
    Спасибо! Мне нужны эти два варианта, чтобы он не спрашивал меня снова и снова!
  • 0
    Обратите внимание, что это значения по умолчанию для этих настроек.
27

Здесь я уверен, что вы ищете:

cpan> o conf prerequisites_policy follow
cpan> o conf commit
6

Возможно, это связано с ExtUtils:: AutoInstall или Module:: AutoInstall. Попробуйте установить переменную среды PERL_AUTOINSTALL. (См. Документацию этих модулей.)

6

Установите

prerequisites_policy

в конфигурации.

См. Config Variables.

  • 2
    Связаны ли подсказки с загрузкой источника модуля? Если это так, см. Параметр connect_to_internet_ok . В противном случае, сообщите нам, какие другие подсказки вы пытаетесь избежать.
  • 0
    Ну все в принципе, эти последние были "дополнительными модулями".
Показать ещё 2 комментария
3

Лично я попробовал пару раз, чтобы изменить настройки таким образом и на самом деле было проще сбрасывать в оболочку CPAN.pm, предоставляя cpan никаких аргументов, а затем настраивая CPAN.pm из интерактивной подсказки

$ cpan
cpan> o conf init

Это приведет к запуску утилиты конфигурирования интерфейсов CPAN.pm. Просто пройдите через него и укажите "следовать" там, где вам нужно (я забыл вопрос заранее), и вам должно быть хорошо идти.

  • 0
    Вы можете передать определенные настройки в init . Например, o conf init prerequisites_policy . Таким образом, вам не нужно проходить долгий процесс инициализации, но вы все равно получите дружественную подсказку для нужного параметра
2

Я нашел, что это, безусловно, самый быстрый и надежный способ установки модулей CPAN:

yes | perl -MCPAN -e "CPAN::Shell->notest(qw!install Your::Module!)"
  • 0
    Это не отвечает на вопрос - OP хочет способ автоматически устанавливать зависимости / автоматически отвечать на запросы.
  • 0
    Фактически, он устанавливает зависимости и автоматически отвечает на запросы. Я использую это все время, включая этот самый момент. Но есть необходимость в небольшой модификации: yes|/root/bin/perl -MCPAN -e "CPAN::Shell->notest(qw!install Your::Module!)"
Показать ещё 1 комментарий
1

Я пишу это для людей, которые, возможно, пришли на эту страницу, чтобы найти способ установки всех зависимостей модулей, необходимых для конкретного 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 не установлен, он установит его.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню