【问题标题】:Is it possible to install perl prerequisites before distribution testing and how?是否可以在分发测试之前安装 perl 先决条件以及如何安装?
【发布时间】:2013-09-17 16:57:39
【问题描述】:

我尝试从Module::Starter 基础构建 a Perl distribution for a home-made module。我的机器上的每个测试都通过了,但是当我将它上传到 CPAN 以从 cpantesters.org 获得更多 universal 测试时,some test failed on other architectures or OS,但我不明白为什么。我可以在测试报告中看到我的一些先决条件在测试之前没有安装,但我希望它。

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

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

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

【问题讨论】:

  • 我有seen this on SO,这可能是我搜索的内容:从 Makefile.PL 触发一种Build installdeps
  • BuildMakefile.PL 有点矛盾... :-)

标签: perl testing module makefile prerequisites


【解决方案1】:

问题是不同的。 Andreas 的吸烟者很可能成功地建立了依赖关系App::Ack(在失败报告中看起来就像不存在一样)。但这里至少有两个问题:

  • 当一个发行版被测试时,它的依赖可能已经安装了,也可能没有安装。但是,保证所有依赖模块都可以通过PERL5LIB 环境变量使用,所以make test 通常可以工作(更具体地说,如果在CPAN shell 中使用install Module 命令,那么所有依赖项都会立即安装. 如果使用test Module 命令,则仅构建依赖项,但不安装。CPAN 用户可以稍后使用install_tested 进行安装)。所以可能App::Ack 没有在此处安装,只是构建。特别是这意味着ack 脚本没有安装在最终位置。
  • 即使已安装,许多冒烟测试人员或并行安装了多个 perl 的用户使用此 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 下的PREREQUISITES 部分中,您还可以在“HAVE”中查看安装了哪个App::Ack 版本“ 柱子)。您还可以看到用户的PATH(在环境部分)。您可能会猜到这个 perl 的 scriptdir,它通常与安装 perl 二进制文件本身的目录相同,并且当前 perl 的路径在 $^X 中可见(在“Perl 特殊变量”下)。

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

【讨论】:

  • 嘿@slaven-rezic,谢谢您的详细回答,我很感激。我会重新考虑我的测试计划。感谢您花时间阅读烟雾报告以及我的一些丑陋代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-15
相关资源
最近更新 更多