我有一个Perl脚本,它有两个CPAN中存在的依赖项。我想要做的是让脚本本身提示用户安装必要的依赖项,以便脚本能够正常运行。如果用户需要输入某种身份验证来安装没关系的依赖项:我要避免的是以下工作流程:
运行脚本 - >看它失败 - >漫无目的地搜寻CPAN - >林奇剧本作家
相反,我希望有类似的东西:
运行脚本 - >自动下载脚本依赖项(根据需要进行身份验证) - >脚本成功 - >给脚本作家买啤酒
可以这样做吗?
答案 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'