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

标签 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 魔法。感谢您的帮助。

最佳答案

问题有所不同。安德烈亚斯的吸烟者很可能建立了依赖性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/

相关文章:

perl - 如何将散列的一部分传递给子例程?

apache - 无法在 Ubuntu 上禁用 Apache 2.2 上的模块

javascript - 在我的例子中如何访问 JavaScript 模块模式?

excel - 合并 Excel 中的单元格并使用 Spreadsheet::WriteExcel 提供超链接

windows - 我怎样才能使批处理文件像使用 Perl 的简单 grep 一样运行?

javascript - 浏览器中的Istanbul.js

ruby-on-rails - 无法命中数据库,通过 minitest 集成测试

模块内的 ruby​​ 模块

regex - 使用 Sed 获取开始字符和结束字符之间的所有字符

testing - 添加断言编码的 UI 测试