Як мені сказати CPAN встановлювати всі залежності?


113

Як мені сказати CPAN встановлювати всі залежності?

Я спробував встановити їх у cpan:

cpan> o conf prerequisites_policy follow
cpan> o conf commit

Мені все-таки довелося відповісти "у" пару разів (але менше, ніж раніше, ніж це відчувається).

Чи є спосіб отримати його завжди йти вперед і встановлювати? Я хочу зробити це без нагляду.

Здавалося б, я хочу, щоб прапор завжди довіряв CPAN, щоб він зробив правильно, і якщо він пропонує відповідь, я хотів би слідувати за ним (завжди натискаю, Enterколи він щось запитує).


1
Можливо, я повинен додати функцію до свого сценарію cpan, щоб встановити змінні середовища для автоматичної установки на основі налаштування CPAN.pm. Дивіться відповідь tsee, яка є другою половиною проблеми.
Брайан d foy

Відповіді:


31

Ось однолінійка, яка робить ці зміни постійними, включаючи автоматичну первинну конфігурацію 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 або інше.


це не те саме, що в @sdf anwer?
filimonov

83

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

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

Це повинно зробити так, щоб CPAN відповідав за замовчуванням на всі підказки.


Будь-який спосіб зробити це стійким, тому ви можете просто набрати "встановити Мій: Модуль" у cpan кожного разу, і він запам'ятає це? Редагувати Config.pm?
Джефф

3
Якщо ви перебуваєте в Linux, додайте рядок export PERL_MM_USE_DEFAULT=1до свого ~ / .bashrc
andersі

1
Якщо ви отримаєте помилку, Can't locate object method "install" via package "xxx" at -e line 1.додайте "+" прямо перед назвою модуля.
Ян Сагон

55

Остання і найбільша відповідь на це питання - використовувати cpanmзамість цього (також його називають App: cpanminus або cpanminus)!

ОПИС

cpanminus - це сценарій для отримання, розпакування, складання та встановлення модулів з CPAN і більше нічого не робить.

Це вільна залежність (може завантажуватися сама), вимагає нульової конфігурації та стоїть окремо. Під час роботи потрібно лише 10 Мб оперативної пам’яті.

Для завантаження встановіть його:

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

або якщо ви використовуєте perlbrewпросто

perlbrew install-cpanm

або з самого cpan:

cpan install App::cpanminus

З цього моменту встановіть модулі, виконавши (як root, якщо потрібно)

cpanm Foo::Bar

1
У мене є ця проблема, коли я її використовую cpanm, тому сказати мені використовувати її не є тут рішенням.
reinierpost

3
а не сліпий коментар, будь ласка, поставте тут як нове запитання та посилання. Я підозрюю, що проблема з дозволом може бути вашою проблемою
Джоель Бергер

На Ubuntu 18.04, з яким я встановив sudo apt install cpanminus make.
Пабло А

Вниз голосування. Не рекомендуйте людям виконувати висновок curl.
Річард Сміт

28

Ось що я впевнений, що ви шукаєте:

cpan> o conf prerequisites_policy follow
cpan> o conf commit

27

Зміна наступного параметра поверх попередніх умов_політики випливає.

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

Це змінить його з "запитання / так" на "так" і перестане запитувати вас.


Дякую! Мені потрібні ці два варіанти, щоб це не запитувало мене знову і знову!
Дат ТТ

Зверніть увагу, що ці параметри є типовими для цих параметрів.
ikegami


6

Встановити

prerequisites_policy

у конфігурації.

Див. Розділ Налаштування змінних .


2
Чи пов'язані запити щодо завантаження джерела модуля? Якщо так, див. Параметр connect_to_internet_ok . В іншому випадку розкажіть, яких інших підказок ви намагаєтеся уникати.
Sinan Ünür

Ну, в основному, останніми були "додаткові модулі".
Ніфле

Проблема полягає в речах, які автоматично встановлюються самостійно. CPAN.pm не отримує шансів впоратися з цими матеріалами. Дивіться відповідь tsee.
Брайан d foy

1
Зараз посилання здається мертвою
OrangeDog

3

Особисто я лише кілька разів намагався змінити налаштування таким чином і мені стало легше потрапляти в CPAN.pmоболонку, cpanне даючи жодних аргументів, а потім конфігуруючи CPAN.pmз інтерактивного запиту:

$ cpan
cpan> o conf init

Це ініціює CPAN.pmутиліту налаштування інтерфейсів. Просто пропустіть його та вкажіть "слідкуйте", куди вам потрібно (я забув питання назовні), і вам слід добре піти.


Ви можете передати певні налаштування init. Наприклад, o conf init prerequisites_policy. Таким чином, вам не доведеться пройти довгий процес ініціалізації, але все-таки отримаєте дружнє підказку щодо відповідної настройки
ikegami

3

Я вважав, що це, безумовно, найшвидший та найнадійніший спосіб встановлення модулів 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!)"
Володимир Марченко

Що yesпотрібно робити ""?
Пітер Мортенсен

2

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.