我尝试构建 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
魔法。感谢您的帮助。
最佳答案
问题有所不同。安德烈亚斯的吸烟者很可能建立了依赖性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}
。如果可能的话,另一个解决方案是使用应用程序模块而不是脚本。不幸的是它看起来像ack
只能作为脚本调用。
如果你看 sample fail report ,那么你可以看到App::Ack
已安装(它出现在 require 和 build_requires 下的 PREREQUISITES 部分中,您还可以在“HAVE”列中看到安装了哪个 App::Ack
版本)。还可以看到用户的PATH
(在环境部分)。您可能会猜测这个 perl 的 scriptdir,它通常与安装 perl 二进制文件本身的目录相同,并且当前 perl 的路径在 $^X
中可见。 (在“Perl 特殊变量”下)。
如果您想重现该行为,则需要卸载 ack
从您的机器上,使用 ./configure.gnu --prefix=/path/to/custom/perl-5.X.Y
构建自定义 Perl ,并使用这个 perl 进行测试。
关于perl - 是否可以在分发测试之前安装 perl 先决条件以及如何安装?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18855635/