Perl脚本可以安装自己的CPAN依赖项吗?

时间:2011-10-05 16:51:27

标签: perl automation installation dependencies cpan

我有一个Perl脚本,它有两个CPAN中存在的依赖项。我想要做的是让脚本本身提示用户安装必要的依赖项,以便脚本能够正常运行。如果用户需要输入某种身份验证来安装没关系的依赖项:我要避免的是以下工作流程:

  

运行脚本 - >看它失败 - >漫无目的地搜寻CPAN - >林奇剧本作家

相反,我希望有类似的东西:

  

运行脚本 - >自动下载脚本依赖项(根据需要进行身份验证) - >脚本成功 - >给脚本作家买啤酒

可以这样做吗?

2 个答案:

答案 0 :(得分:19)

每个标准构建范例都有自己的指定依赖关系的方式。在所有这些情况下,构建过程将尝试在某些上下文中自动安装依赖项。

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中,您在调用编写Makefile的命令之前执行一个或多个 requires 命令:

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

答案 1 :(得分:-2)

您可以从脚本中执行此操作。

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