Использовать perlbrew с тестом dist zilla
Я использую модуль Dist:: Zilla для выпуска и тестирования моего модуля. Я также использую 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
и работает make test
для тебя. Может ли это быть потому, что для тестирования требуется более старая версия perl? Вот так:
use 5.006;
Но даже в этом случае некоторые Perlbrew каталоги присутствуют в @INC
во время теста, такого как
/Users/user/perl5/lib/perl5/darwin-thread-multi-2level
Кто-нибудь знает, как я могу сделать так, чтобы я мог использовать установку Mouse в моем каталоге perl вместо установки общесистемной? У меня была предыдущая ошибка с другим модулем, который не мог быть найден при запуске dzil test
и этот модуль был в том же каталоге, что и Mouse
, Я смог решить проблему, установив модуль в масштабе всей системы, а не локально у себя дома. perl5
каталог, но я бы предпочел использовать мышь, установленную Perlbrew, и не связываться с моим системным perl, если это возможно. Я использую Perlbrew версии 0.73.
1 ответ
Вы пытаетесь установить его, используя неправильный perl
так как вы используете dzil
установлен другой perl
чем тот, который вы хотите использовать.
Кроме того, вы не должны видеть ничего из следующего в вашем perlbrew
издание perl
"s @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
изданиеperl
даже не с резьбой!!!)
Давайте очистим вашу среду.
Unset env vars
PERL5LIB
,PERLLIB
,PERL5OPT
,PERL_MM_OPT
а такжеPERL_MB_OPT
, Постоянно. Избавьтесь от них в сценариях входа в систему, затем удалите их из текущей оболочки или снова войдите в систему. (Запишите, какие они были в качестве резервной копии.)Очистить
cpan'
элемент конфигурации с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'
элемент конфигурации с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"