Подтвердить что ты не робот

Может ли Perl script установить собственные зависимости CPAN?

У меня есть Perl script, который имеет две зависимости, существующие в CPAN. Я бы хотел, чтобы сам script попросил пользователя установить необходимые зависимости, чтобы script работал правильно. Если пользователю необходимо ввести какую-либо аутентификацию для установки подходящих зависимостей: то, что я пытаюсь избежать, это следующий рабочий процесс:

Запуск script → Наблюдать за сбоем → Бесцельно очистить CPAN → Lynch the script writer

Вместо этого я надеюсь на что-то вроде:

Запуск script → Автозагрузка script зависимостей (при необходимости аутентификации) → script → Купить script писатель пива

Можно ли это сделать?

4b9b3361

Ответ 1

Каждая из стандартных парадигм сборки имеет свой собственный способ определения зависимостей. Во всех этих случаях процесс сборки будет пытаться установить ваши зависимости автоматически в некоторых контекстах.

В ExtUtils::MakeMaker вы передаете хеш-ссылку в поле PREREQ_PM на WriteMakefile:

# Makefile.PL for My::Module
use ExtUtils::MakeMaker;

WriteMakefile (
    NAME => 'My::Module',
    AUTHOR => ...,
    ...,
    PREREQ_PM => {
        'Some::Dependency' => 0,             # any version
        'Some::Other::Dependency' => 0.42,   # at least version 0.42
        ...
    },
    ...
 );

В Module::Build вы передадите hashref в поле build_requires:

# Build.PL
use Module::Build;
...
my $builderclass = Module::Build->subclass( ... customizations ... );
my $builder = $builderclass->new(
    module_name => 'My::Module',
    ...,
    build_requires => {
        'Some::Dependency' => 0,
        'Some::Other::Dependency' => 0.42,
    },
    ...
);
$builderclass->create_build_script();

В Module::Install вы выполняете одну или несколько команд requires перед вызовом команды для записи файла Makefile:

# Makefile.PL
use inc::Module::Install;
...
requires 'Some::Dependency' => 0;
requires 'Some::Other::Dependency' => 0.42;
test_requires 'Test::More' => 0.89;
...
WriteAll;

Ответ 2

Возможно, вы можете просто выполнить это изнутри script.

perl -MCPAN -e 'install MyModule::MyDepends'