我正在使用地区::Zilla模块发布和测试我的模块。我也在使用珀尔布莱。当我使用包含我的模块的perlbrew运行脚本时,脚本运行得很好:
use strict;
use My::Module;然而,每当我运行dzil test时,在一个只包含我的模块的测试中:
#!perl -T
use strict;
use warnings FATAL => 'all';
use Test::More;
plan tests => 1;
BEGIN {
use_ok( 'My::Module' ) || print "Bail out!\n";
}
diag( "Testing My::Module $My::Module::VERSION, Perl $], $^X" );它失败了,因为这个错误说它找不到模块鼠标(我的模块包括):
Error: Can't locate Mouse.pm in @INC (you may need to install the Mouse module) (@INC contains:
/Users/user/github/My/Module/.build/HoKOnIQGYr/blib/lib
/Users/user/github/My/Module/.build/HoKOnIQGYr/blib/arch
/Users/user/perl5/lib/perl5/darwin-thread-multi-2level
/Users/user/perl5/lib/perl5/darwin-thread-multi-2level
/Users/user/perl5/lib/perl5
/opt/local/lib/perl5/vendor_perl/5.16.1/darwin-thread-multi-2level/
/Users/user/perl5/lib/perl5/darwin-thread-multi-2level
/Users/user/perl5/lib/perl5
/opt/local/lib/perl5/vendor_perl/5.16.1/darwin-thread-multi-2level/
/Library/Perl/5.18/darwin-thread-multi-2level /Library/Perl/5.18
/Network/Library/Perl/5.18/darwin-thread-multi-2level
/Network/Library/Perl/5.18
/Library/Perl/Updates/5.18.2/darwin-thread-multi-2level
/Library/Perl/Updates/5.18.2
/System/Library/Perl/5.18/darwin-thread-multi-2level
/System/Library/Perl/5.18
/System/Library/Perl/Extras/5.18/darwin-thread-multi-2level
/System/Library/Perl/Extras/5.18) at
/Users/user/github/My/Module/.build/HoKOnIQGYr/blib/lib/My/Module.pm line 4.它说它找不到Mouse.pm,我知道它位于
/Users/user/perl5/lib/perl5/darwin-2level我发现由于某种原因,这个目录不在@INC中,这很有趣,因为如果我运行这个命令来打印@INC中的所有目录
perl -e 'print "$_\n" for @INC'我得到:
/Users/user/perl5/lib/perl5/darwin-2level
/Users/user/perl5/lib/perl5
/opt/local/lib/perl5/vendor_perl/5.16.1/darwin-thread-multi-2level/
/Users/user/perl5/perlbrew/perls/perl-5.16.0/lib/site_perl/5.16.0/darwin-2level
/Users/user/perl5/perlbrew/perls/perl-5.16.0/lib/site_perl/5.16.0
/Users/user/perl5/perlbrew/perls/perl-5.16.0/lib/5.16.0/darwin-2level
/Users/user/perl5/perlbrew/perls/perl-5.16.0/lib/5.16.0
.因此,当我在命令行上运行perl时,darwin-2level目录就出现在@INC中,但是每当我运行dzil test时,它就不存在了。这可能与Dist::Zilla没有多大关系,因为我认为Dist::Zilla只是创建Makefile.PL并为您运行make test。这可能是因为为了测试一个旧版本的perl是必需的吗?就像这样:
use 5.006;但是即使如此,在测试期间,@INC中仍然存在一些Perlbrew目录,如
/Users/user/perl5/lib/perl5/darwin-thread-multi-2level有人知道我怎样才能做到这一点吗?这样我就可以在perl目录中使用鼠标安装,而不是安装全系统的鼠标了吗?以前运行dzil test时找不到的另一个模块出现了错误,该模块与Mouse位于同一个目录中。我能够通过在系统范围内安装模块来解决这个问题,而不是在我的主perl5目录中本地安装,但是如果可能的话,我更愿意使用由Perlbrew安装的鼠标,而不是乱搞我的系统perl。我使用的是Perlbree0.73版本。
发布于 2015-06-03 17:06:18
您正在尝试使用错误的perl安装它,因为您使用的dzil安装方式与您想要使用的perl不同。
此外,您不应该在perlbrewed perl的@INC中看到任何以下内容
/Users/user/perl5/lib/perl5/darwin-2level/Users/user/perl5/lib/perl5/opt/local/lib/perl5/vendor_perl/5.16.1/darwin-thread-multi-2level/ (您perlbrewed perl甚至不是线程!)1. Unset env vars `PERL5LIB`, `PERLLIB`, `PERL5OPT`, `PERL_MM_OPT` and `PERL_MB_OPT`. Permanently. Get rid of them in your login scripts, then unset them from the current shell or log back in. (Make a note of what they were as a backup.)
2. Clear `cpan'`s configuration item `makepl_arg`. From within `cpan`,o conf makepl_arg #只是将其当前值视为备份。O conf makepl_arg '‘o conf提交
特别是,我们希望删除任何指示安装路径的内容,包括INSTALL_BASE、PREFIX和LIB。
3.清除cpan'的配置项mbuildpl_arg。在cpan内部,
O conf mbuildpl_arg #只是将其当前值视为备份。O conf mbuildpl_arg '‘o conf提交
特别是,我们希望删除任何指示安装路径的内容,包括--install_base、--prefix和--lib。
4.既然您在那里,请在cpan内部执行以下操作:
O conf build_dir_reuse 0 o conf提交
这将将该设置恢复为默认设置,如果更改了该设置,您将不会感到头疼。
此时,执行which dzil应该给出
/Users/user/perl5/perlbrew/perls/perl-5.16.0/bin/dzil如果是这样的话,你就可以走了。
如果没有,请执行hash -r并再次尝试which dzil。(这不应该是必要的,而只是为了确定。)
如果仍然没有,请提供以下命令的输出:
echo "$PATH"
which cpan
head -n 3 "$( which cpan )"
echo 'o conf' | cpan | grep arg
which dzil
head -n 3 "$( which dzil )"
perl -V # Uppercase "V"https://stackoverflow.com/questions/30625955
复制相似问题