将 perlbrew 与 dist zilla test 一起使用
use perlbrew with dist zilla test
我正在使用Dist::Zilla module to release and test my module. I am also using Perlbrew。当我 运行 使用包含我的模块的 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" );
失败并出现此错误,提示找不到模块 Mouse(我的模块包含):
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
和 运行s make test
。这可能是因为测试需要旧版本的 perl 吗?像这样:
use 5.006;
但即便如此,在测试过程中 @INC
中仍然存在一些 Perlbrew 目录,例如
/Users/user/perl5/lib/perl5/darwin-thread-multi-2level
有谁知道我该怎么做才能在我的 perl 目录中使用鼠标安装而不是安装系统范围的鼠标?我以前有一个错误,当我 运行 dzil test
时无法找到另一个模块,并且该模块与 Mouse
在同一目录中。我能够通过在系统范围内安装模块而不是在我的主 perl5
目录中本地安装来解决这个问题,但我更愿意使用 Perlbrew 安装的鼠标,并且如果可能的话不要弄乱我的系统 perl。我正在使用 Perlbrew 版本 0.73。
您正在尝试使用错误的 perl
安装它,因为您使用的 dzil
是由不同于您要使用的 perl
安装的。
此外,您不应在 perlbrew
ed 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/
(你 perlbrew
ed perl
甚至没有线程!!!)
让我们清理你的环境。
取消设置环境变量 PERL5LIB
、PERLLIB
、PERL5OPT
、PERL_MM_OPT
和 PERL_MB_OPT
。永久。在您的登录脚本中删除它们,然后从当前 shell 取消设置或重新登录。(记下它们作为备份。)
清除cpan'
s配置项makepl_arg
。来自 cpan
,
o conf makepl_arg # Just to see its current value as a backup.
o conf makepl_arg ''
o conf commit
特别是,我们要删除任何指示安装路径的内容,包括 INSTALL_BASE
、PREFIX
和 LIB
。
清除cpan'
s配置项mbuildpl_arg
。来自 cpan
,
o conf mbuildpl_arg # Just to see its current value as a backup.
o conf mbuildpl_arg ''
o conf commit
特别是,我们要删除任何指示安装路径的内容,包括 --install_base
、--prefix
和 --lib
。
既然你在那里,请在 cpan
中执行以下操作:
o conf build_dir_reuse 0
o conf commit
这会将设置恢复为默认设置,如果更改了设置,这会让您省心。
安装依赖项。
cpan Dist::Zilla Mouse
此时,执行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"
我正在使用Dist::Zilla module to release and test my module. I am also using Perlbrew。当我 运行 使用包含我的模块的 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" );
失败并出现此错误,提示找不到模块 Mouse(我的模块包含):
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
和 运行s make test
。这可能是因为测试需要旧版本的 perl 吗?像这样:
use 5.006;
但即便如此,在测试过程中 @INC
中仍然存在一些 Perlbrew 目录,例如
/Users/user/perl5/lib/perl5/darwin-thread-multi-2level
有谁知道我该怎么做才能在我的 perl 目录中使用鼠标安装而不是安装系统范围的鼠标?我以前有一个错误,当我 运行 dzil test
时无法找到另一个模块,并且该模块与 Mouse
在同一目录中。我能够通过在系统范围内安装模块而不是在我的主 perl5
目录中本地安装来解决这个问题,但我更愿意使用 Perlbrew 安装的鼠标,并且如果可能的话不要弄乱我的系统 perl。我正在使用 Perlbrew 版本 0.73。
您正在尝试使用错误的 perl
安装它,因为您使用的 dzil
是由不同于您要使用的 perl
安装的。
此外,您不应在 perlbrew
ed 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/
(你perlbrew
edperl
甚至没有线程!!!)
让我们清理你的环境。
取消设置环境变量
PERL5LIB
、PERLLIB
、PERL5OPT
、PERL_MM_OPT
和PERL_MB_OPT
。永久。在您的登录脚本中删除它们,然后从当前 shell 取消设置或重新登录。(记下它们作为备份。)清除
cpan'
s配置项makepl_arg
。来自cpan
,o conf makepl_arg # Just to see its current value as a backup. o conf makepl_arg '' o conf commit
特别是,我们要删除任何指示安装路径的内容,包括
INSTALL_BASE
、PREFIX
和LIB
。清除
cpan'
s配置项mbuildpl_arg
。来自cpan
,o conf mbuildpl_arg # Just to see its current value as a backup. o conf mbuildpl_arg '' o conf commit
特别是,我们要删除任何指示安装路径的内容,包括
--install_base
、--prefix
和--lib
。既然你在那里,请在
cpan
中执行以下操作:o conf build_dir_reuse 0 o conf commit
这会将设置恢复为默认设置,如果更改了设置,这会让您省心。
安装依赖项。
cpan Dist::Zilla Mouse
此时,执行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"