我尝试从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
魔法。谢谢你的帮助。
答案 0 :(得分:2)
问题是不同的。安德烈亚斯的吸烟者很可能成功构建了依赖关系App::Ack
(在失败报告中看起来像缺席)。但至少有两个问题:
PERL5LIB
环境变量使用,因此make test
通常可以工作(更具体地说,如果在CPAN shell中使用install Module
命令,然后立即安装所有依赖项。如果使用test Module
命令,则只构建依赖项,但不安装.CPAN用户可以稍后使用install_tested
)进行安装。因此,App::Ack
可能不是已安装,只是已构建。特别是这意味着ack
脚本未安装在最终位置。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进行测试。