是否可以在分发测试之前安装perl先决条件以及如何?

时间:2013-09-17 16:57:40

标签: perl testing module makefile prerequisites

我尝试从a Perl distribution for a home-made module基础构建 Module::Starter。每次测试都在我的机器上传递,但当我将其上传到CPAN以从cpantesters.org some test failed on other architectures or OS获得更多通用测试时,但我无法理解为什么。我可以在测试报告中看到我的一些先决条件在测试之前没有安装,但我希望如此。

我尝试将这些依赖项列入Makefile.PL PREREQ_PM哈希和then in the TEST_REQUIRES hash,但它没有改变很多结果。

然后,当我从本地计算机中删除依赖项并尝试使用Cpanm安装我的模块时,它首先下载依赖项,测试已通过并且安装成功。

这是我对模块的第一次尝试,所以我想我错过了一些东西,也许我太习惯了Cpanm魔法。谢谢你的帮助。

1 个答案:

答案 0 :(得分:2)

问题是不同的。安德烈亚斯的吸烟者很可能成功构建了依赖关系App::Ack(在失败报告中看起来像缺席)。但至少有两个问题:

  • 当测试分发时,其依赖关系可能已安装,也可能未安装。但是,保证所有相关模块都可以通过PERL5LIB环境变量使用,因此make test通常可以工作(更具体地说,如果在CPAN shell中使用install Module命令,然后立即安装所有依赖项。如果使用test Module命令,则只构建依赖项,但不安装.CPAN用户可以稍后使用install_tested)进行安装。因此,App::Ack可能不是已安装,只是已构建。特别是这意味着ack脚本未安装在最终位置。
  • 即使安装了它,许多烟雾测试人员或同时安装了多个perls的用户也会使用这个perl的非标准目录。因此ack不会安装在/usr/bin/usr/local/bin中,而是安装在属于此perl的bin目录中。该目录可能或可能不在用户的PATH中。所以你不能假设can_run("ack")在这里工作。此处的解决方法是暂时将$Config{scriptdir}添加到$ENV{PATH}。另一种解决方案是使用App模块而不是脚本(如果可能的话)。不幸的是,ack似乎只能作为脚本调用。

如果您查看sample fail report,则可以看到App::Ack已安装(它出现在前提条件部分的requires和build_requires下,您还可以看到App::Ack版本安装在“HAVE”列中。您还可以看到用户的PATH(在“环境”部分中)。你可以猜测这个perl的scriptdir,它通常是安装perl二进制文件的同一目录,当前perl的路径在$^X中可见(在“Perl特殊变量”下)。

如果要重现行为,则需要从计算机上卸载ack,使用./configure.gnu --prefix=/path/to/custom/perl-5.X.Y构建自定义perl,并使用此perl进行测试。