Perl 模块安装失败 Date::Calc

Install fails with Perl module Date::Calc

我正在尝试安装 perl 模块 Date::Calc 版本 6。它是 gnuCalc 的一部分,但在安装时失败了。我选择手动下载 Date::Calc 并安装它,但它给出了完全相同的错误,如下所示。由于 Date::Calc 不限于 gnuCalc,我希望有人能指出我解决这个问题的方向。

我在 Windows 7 64 位。 Perl 是草莓 Perl ver 5.18.2002

提前致谢。

E:\Downloads\Date-Calc-6.3>perl Makefile.PL

*************************************************************
****** BEWARE: Use "make install UNINST=1" to install! ******
*************************************************************

Checking if your kit is complete...
Looks good
Generating a dmake-style Makefile
Writing Makefile for Date::Calc
Writing MYMETA.yml and MYMETA.json

E:\Downloads\Date-Calc-6.3>C:\strawberry\c\bin\dmake.exe
cp lib/Date/Calc/Object.pod blib\lib\Date\Calc\Object.pod
cp lib/Date/Calc.pm blib\lib\Date\Calc.pm
cp lib/Date/Calendar/Profiles.pod blib\lib\Date\Calendar\Profiles.pod
cp lib/Date/Calendar.pm blib\lib\Date\Calendar.pm
cp lib/Date/Calendar.pod blib\lib\Date\Calendar.pod
cp lib/Date/Calc/Object.pm blib\lib\Date\Calc\Object.pm
cp lib/Date/Calc/PP.pm blib\lib\Date\Calc\PP.pm
cp lib/Date/Calendar/Profiles.pm blib\lib\Date\Calendar\Profiles.pm
cp lib/Date/Calc/PP.pod blib\lib\Date\Calc\PP.pod
cp lib/Date/Calendar/Year.pod blib\lib\Date\Calendar\Year.pod
cp lib/Date/Calendar/Year.pm blib\lib\Date\Calendar\Year.pm
cp lib/Date/Calc.pod blib\lib\Date\Calc.pod

E:\Downloads\Date-Calc-6.3>C:\strawberry\c\bin\dmake.exe test
C:\strawberry\perl\bin\perl.exe "-MExtUtils::Command::MM" "-MTest::Harness" "-e"
 "undef *Test::Harness::Switches; test_harness(0, 'blib\lib', 'blib\arch')" t/*.
t
t/f000.t .. ok
t/f001.t .. ok
t/f002.t .. ok
t/f003.t .. ok
t/f004.t .. ok
t/f005.t .. ok
t/f006.t .. ok
t/f007.t .. ok
t/f008.t .. ok
t/f009.t .. ok
t/f010.t .. ok
t/f011.t .. ok
t/f012.t .. ok
t/f013.t .. ok
t/f014.t .. ok
t/f015.t .. ok
t/f016.t .. Failed 16/25 subtests
t/f017.t .. ok
t/f018.t .. ok
t/f019.t .. ok
t/f020.t .. ok
t/f021.t .. ok
t/f022.t .. ok
t/f023.t .. ok
t/f024.t .. ok
t/f025.t .. ok
t/f026.t .. ok
t/f027.t .. Failed 22/46 subtests
t/f028.t .. Failed 22/46 subtests
t/f029.t .. ok
t/f030.t .. ok
t/f031.t .. ok
t/f032.t .. ok
t/f033.t .. ok
t/f034.t .. ok
t/f035.t .. ok
t/f036.t .. ok
t/f037.t .. ok
t/m001.t .. ok
t/m002.t .. ok
t/m003.t .. ok
t/m004.t .. ok
t/m005.t .. ok
t/m006.t .. ok
t/m007.t .. ok
t/m008.t .. ok
t/m009.t .. ok
t/m010.t .. ok
t/m011.t .. ok
t/m012.t .. ok
t/m013.t .. ok

Test Summary Report
-------------------
t/f016.t (Wstat: 0 Tests: 25 Failed: 16)
  Failed tests:  1-4, 6-7, 9-12, 15-17, 21-23
t/f027.t (Wstat: 0 Tests: 46 Failed: 22)
  Failed tests:  7-15, 22, 24-27, 30-35, 44-45
t/f028.t (Wstat: 0 Tests: 46 Failed: 22)
  Failed tests:  7-15, 22, 24-27, 30, 32, 34-37, 44-45
Files=51, Tests=3381,  3 wallclock secs ( 0.20 usr +  0.01 sys =  0.22 CPU)
Result: FAIL
Failed 3/51 test programs. 60/3381 subtests failed.
dmake.exe:  Error code 255, while making 'test_dynamic'

不要用好的测试替换坏的测试。

这些测试的目的是测试。如果出现问题,您需要了解它,而不是将其掩盖。以一种或另一种方式解决问题。您的系统是否有问题,或者这是测试本身的问题。如果这是测试的问题,它仍然影响你吗?如果这是系统问题,您可能会 运行 遇到这种情况吗?例如,假设有一项测试检查您的系统与 Windows 系统之间的连接性。如果您未连接到 Windows 系统,则该特定测试可能不适用于您。

如果测试失败,请转到 MetaCPAN webpage for that module, and check the left hand side for issues to see if someone else is getting the same errors. (Bug #101232 for Date-Calc: Test suite started to fail since 2015-01-01 - 新年快乐!)。

还有一个 QA 测试人员 CPAN 网页,但现在已关闭。 QA 测试人员网页将向您展示各种 Perl 版本、模块版本、平台,并向您展示哪些测试在特定平台上的哪些版本上失败了。您可能需要安装该模块的替代版本。

只有当您确定失败的测试不一定适用于您时,才执行 force 安装:

cpan> force install Date::Calc

这将 运行 完成整个安装,只是它会跳过所有测试。 (或者它可能仍在测试,但如果测试失败也不会失败。)。该模块仍然会因编译器错误或某些内容无法写入您的系统而失败。它只是忽略了测试。

这应该是最后一次拼命安装东西的尝试。您应该已经确定失败的测试是错误或对您没有意义。或者,有人拿着枪指着你的头站在你旁边说,"Install that module, or I'll pull the trigger!".


或者,您可以决定试一试,简单地使用另一个模块——尤其是已经包含在标准 Perl 发行版中的模块,例如 Time::Piece。如果这是一个新的 Perl 程序,您不妨使用 Time::Piece,因为它是 Perl 的 官方 时间计算模块。

好吧,很难说某些东西是否是 官方,但是 Time::Piece 包含在自 5.10 以来的所有 Perl 安装中,并且 Date::Calc,虽然更受欢迎,但事实并非如此。但是,既然 Time::Piece 现在是官方安装的一部分,它更有可能包含在您正在 运行 运行 Perl 程序的系统中。这也意味着更多的人在测试它,更多的用户在使用它,发现的错误更有可能被修复。

如果这是您正在编写的新 Perl 程序,请考虑使用 Time::Piece 而不是 Date::Calc

Date::Calc 手册说: 如果年份仅以一位或两位数字给出(即,如果年份小于 100),它将映射到当前年份周围 +/- 50 年的 "window",如 "Moving_Window()" 函数(见下文)。 所以我不得不说补丁 proposed patch 是正确的,至少在接下来的 50 年里是这样