Может ли скрипт Perl установить свои собственные зависимости CPAN? - PullRequest
17 голосов
/ 05 октября 2011

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

Выполнить сценарий -> Наблюдать за ошибкой -> Scour CPANбесцельно -> Линч сценариста

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

Запуск сценария -> Автоматическая загрузка зависимостей сценария (проверка подлинности при необходимости) ->Сценарий успешен -> Купить сценаристу пиво

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

Ответы [ 2 ]

19 голосов
/ 05 октября 2011

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

В ExtUtils::MakeMaker вы передаете ссылку на хеш в * 1007Поле * в 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 вы передаете хэш-ссылку в поле 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;
0 голосов
/ 05 октября 2011

Вы, вероятно, можете просто выполнить это изнутри вашего скрипта.

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

...