2016-12-01 47 views
2

我有一个窗户生产箱草莓Perl安装(第5.16.3)。我假设很多月前,有人将它安装在C:驱动器上,然后将其移至D :.我不知道,我不在那里,但是当我尝试安装模块时,它工作正常。使用cpanm只会引发C:驱动器上的模块。不好。 @INC不会去那里,管理员也不想要那里的任何东西。我需要在D:上使用Perl。试图迫使CPAN在特定的目录来安装Perl的草莓

所以,我尝试使用CPAN和更改目录:

cpan> o conf mbuildpl_arg "--install_base D:/strawberry/perl" 
    mbuildpl_arg  [--install_base D:strawberryperl] 
commit: wrote 'D:\strawberry\perl\lib/CPAN/Config.pm' 

cpan> o conf makepl_arg "PREFIX=D:/strawberry/perl" 
    makepl_arg   [PREFIX=D:/strawberry/perl] 
commit: wrote 'D:\strawberry\perl\lib/CPAN/Config.pm' 

cpan> install Email::Simple 

它安装在电子邮件简单的d:/草莓/ perl的/ lib目录 - 不完美,但它的作品。大!其他一些人也经历了相同的情况。去安装模块::运行时

cpan> install Module::Runtime 

而且这在D:/草莓/ perl/lib/perl5。咦? OK,并不完美,但我@INC包括d:/草莓/ perl的/ lib以使这不应该是一个问题,对不对?去安装MooX :: Types :: MooseLike :: Base

cpan> install MooX::Types::MooseLike::Base 

不会安装。这里的CPAN BARF出来:

cpan> install MooX::Types::MooseLike::Base 
Running install for module 'MooX::Types::MooseLike::Base' 
Running make for M/MA/MATEU/MooX-Types-MooseLike-0.29.tar.gz 
Checksum for D:\strawberry\cpan\sources\authors\id\M\MA\MATEU\MooX-Types-MooseLike-0.29.tar.gz ok 

    CPAN.pm: Building M/MA/MATEU/MooX-Types-MooseLike-0.29.tar.gz 

Checking if your kit is complete... 
Looks good 
Warning: prerequisite Module::Runtime 0.014 not found. 
... Detected uninstalled Perl. Trying to continue. 
Have \strawb~1\perl\lib 
Want \strawberry\perl\lib 
Writing Makefile for MooX::Types::MooseLike 
Writing MYMETA.yml and MYMETA.json 
---- Unsatisfied dependencies detected during ---- 
---- MATEU/MooX-Types-MooseLike-0.29.tar.gz ---- 
    Module::Runtime [requires] 
Running make test 
    Delayed until after prerequisites 
Running make install 
    Delayed until after prerequisites 
Running install for module 'Module::Runtime' 
Running Build for Z/ZE/ZEFRAM/Module-Runtime-0.014.tar.gz 
    Has already been unwrapped into directory D:\strawberry\cpan\build\Module-Runtime-0.014-yHdcFp 
    Has already been made 
Running Build test 
    Has already been tested successfully 
Running Build install 
    Already done 
Running make for M/MA/MATEU/MooX-Types-MooseLike-0.29.tar.gz 
    Has already been unwrapped into directory D:\strawberry\cpan\build\MooX-Types-MooseLike-0.29-UaWuDZ 

    CPAN.pm: Building M/MA/MATEU/MooX-Types-MooseLike-0.29.tar.gz 

Warning: Prerequisite 'Module::Runtime => 0.014' for 'MATEU/MooX-Types-MooseLike-0.29.tar.gz' already built but the resu 
lt looks suspicious. Skipping another build attempt, to prevent looping endlessly. 
cp lib/MooX/Types/MooseLike.pm blib\lib\MooX\Types\MooseLike.pm 
cp lib/MooX/Types/MooseLike/Base.pm blib\lib\MooX\Types\MooseLike\Base.pm 
    MATEU/MooX-Types-MooseLike-0.29.tar.gz 
    D:\strawberry\c\bin\dmake.exe -- OK 
Running make test 
D:\strawberry\perl\bin\perl.exe "-ID:/strawberry/perl/lib" "-ID:/strawberry/perl/lib" "-MExtUtils::Command::MM" "-e" "te 
st_harness(0, 'blib\lib', 'blib\arch')" t/*.t 
t/basic.t ........................ Can't locate Module/Runtime.pm in @INC (@INC contains: D:\strawberry\cpan\build\MooX- 
Types-MooseLike-0.29-UaWuDZ\blib\lib D:\strawberry\cpan\build\MooX-Types-MooseLike-0.29-UaWuDZ\blib\arch D:/strawberry/p 
erl/lib D:/strawberry/perl/site/lib/MSWin32-x86-multi-thread D:/strawberry/perl/site/lib D:/strawberry/perl/vendor/lib D 
:/strawberry/perl/lib .) at D:/strawberry/perl/lib/Moo/_Utils.pm line 23. 
BEGIN failed--compilation aborted at D:/strawberry/perl/lib/Moo/_Utils.pm line 23. 
Compilation failed in require at D:/strawberry/perl/lib/Moo.pm line 13. 
BEGIN failed--compilation aborted at D:/strawberry/perl/lib/Moo.pm line 13. 
Compilation failed in require at t/basic.t line 4. 
BEGIN failed--compilation aborted at t/basic.t line 4. 
t/basic.t ........................ Dubious, test returned 2 (wstat 512, 0x200) 
No subtests run 
t/builder.t ...................... Can't locate Module/Runtime.pm in @INC (@INC contains: D:\strawberry\cpan\build\MooX- 
Types-MooseLike-0.29-UaWuDZ\blib\lib D:\strawberry\cpan\build\MooX-Types-MooseLike-0.29-UaWuDZ\blib\arch D:/strawberry/perl/lib D:/strawberry/perl/site/lib/MSWin32-x86-multi-thread D:/strawberry/perl/site/lib D:/strawberry/perl/vendor/lib 

而这个错误重复几次,所有的试验失败了,等等,等等

Files=14, Tests=0, 1 wallclock secs (0.06 usr + 0.03 sys = 0.09 CPU) 
Result: FAIL 
Failed 14/14 test programs. 0/0 subtests failed. 
dmake.exe: Error code 130, while making 'test_dynamic' 
    MATEU/MooX-Types-MooseLike-0.29.tar.gz 
one dependency not OK (Module::Runtime); additionally test harness failed 
    D:\strawberry\c\bin\dmake.exe test -- NOT OK 
//hint// to see the cpan-testers results for installing this module, try: 
    reports MATEU/MooX-Types-MooseLike-0.29.tar.gz 
Running make install 
    make test had returned bad status, won't install without force 
Stopping: 'install' failed for 'M/MA/MATEU/MooX-Types-MooseLike-0.29.tar.gz'. 
Failed during this command: 
MATEU/MooX-Types-MooseLike-0.29.tar.gz  : make_test NO one dependency not OK (Module::Runtime); additionally test 
harness failed 

所以,问题....

( 1)我需要做什么才能将Module :: Runtime放在正确的位置?我以前尝试改变目录对某些人有效,但不是这个。我宁愿d:\草莓\ perl的\ site \ lib文件 - 因为它似乎cpanm会把它的模块有,但d:\草莓\ perl的\ lib中会工作也没关系。

如果我们解决数(1)这并不重要,但我很好奇,如果任何人有一个答案:

(2)为什么不能CPAN找到模块::运行,当它在一个@INC的子目录?

所以我知道一个答案是重新安装草莓在正确的位置,但是这是一个生产框定运行Perl脚本,并没有停机时间,所以没有,这是不是一种选择。无论如何,他们不会允许我这样做。

在此先感谢您的帮助。

+0

可能的工作方式:将'D:\ strawberry \ perl \ lib5'添加到'%PERL5LIB%' – mob

+0

@mob这将适用于短期,我可以将它放在当前会话的环境变量中,并获取其他模块加载。但是,这种感觉就像一块骨头上的创可贴,因为它不一定能解决问题的根源。你确实说过这是一个解决方法。我还需要重新启动机器来更新机器其余部分的环境,这是我不幸的。所以,我希望能够解决问题的根源。正确安装模块,所以其他问题不会发生。感谢您的输入! – FrankRalphBob

+0

@ikegami感谢您的输入。我们可以将这个答案冲出一点吗?我不熟悉不同的模块类型(MB = Module :: Build&MM = ExtUtils :: MakeMaker?)。我搜索了一些文件,但已经干了。是否有文档解释什么类型以及使用每种类型的后果?再次感谢。 – FrankRalphBob

回答

1

您提供使用的ExtUtils :: MakeMaker的为他们安装与您提供使用Module :: Build作为其安装程序模块的参数不一致模块的参数。选择一个方案并持续使用它。

o conf makepl_arg "INSTALL_BASE=D:/strawberry/perl_modules" 
o conf mbuildpl_arg "--install_base D:/strawberry/perl_modules" 

不要忘了告诉Perl在哪里寻找模块。

set PERL5LIB=D:/strawberry/perl_modules/lib/perl5 

虽然能解决您的眼前的问题,您的固定根本问题的方法是不是最好的。只要清除这些值,应该将模块安装在正确的位置。

o conf makepl_arg "" 
o conf mbuildpl_arg "" 
set PERL5LIB= 

此外请确保您不覆盖env vars中的安装位置。

set PERL_MM_OPT= 
set PERL_MB_OPT= 

最后,你可能要检查Config.pmConfig_heavy.plC:需要改为D:

+0

这是我需要的信息:更好的解决方法是将所有这些未设置,并将C:更改为D:在Config.pm中。有大约15个Config.pm文件,但是D:\ Strawberry \ perl \ lib中有一个文件包含C:条目。将它们更改为D :,并且cpan安装在正确的位置。 cpanm仍然安装在C:驱动器中,所以不知道cpanm从哪里获取配置信息,但至少我可以向前迈进。非常感谢你的帮助ikegami! – FrankRalphBob

+0

是的,我不知道有两个模块安装程序(我对这个Perl的东西有点新)。但有了这些知识,配置参数现在就变得有意义了。我做了一个'o conf init',我认为这会使cpan配置恢复到初始状态。 MM或MB没有环境变量。再次感谢。 – FrankRalphBob

+0

我把那件事拿出来了,因为如果驱动程序的信件是错误的,它不会认为它会找到Config.pm。 – ikegami