Модули успешно устанавливаются, но не могут быть найдены

Мне интересно, почему я получаю «Установка зависимостей не удалась: модуль« Модуль :: Имя »не установлен», даже если зависимость была установлена. Я использую perlbrew и cpanm. Вот пример того, что происходит со многими модулями, которые я пытаюсь установить:

  1. Я пытаюсь установить, например, URI::ws следующим образом
hamid@caspian:~$ /home/hamid/perl5/perlbrew/bin/cpanm --installdeps URI::ws
--> Working on URI::ws
Fetching http://www.cpan.org/authors/id/P/PL/PLICEASE/URI-ws-0.03.tar.gz ... OK
Configuring URI-ws-0.03 ... OK
==> Found dependencies: URI
--> Working on URI
Fetching http://www.cpan.org/authors/id/E/ET/ETHER/URI-1.67.tar.gz ... OK
Configuring URI-1.67 ... OK
Building and testing URI-1.67 ... OK
Successfully installed URI-1.67
! Installing the dependencies failed: Module 'URI' is not installed
! Bailing out the installation for URI-ws-0.03.
1 distribution installed
  1. он говорит мне, что URI не установлен. Поэтому я устанавливаю URI следующим образом:
hamid@caspian:~$ /home/hamid/perl5/perlbrew/bin/cpanm URI
--> Working on URI
Fetching http://www.cpan.org/authors/id/E/ET/ETHER/URI-1.67.tar.gz ... OK
Configuring URI-1.67 ... OK
Building and testing URI-1.67 ... OK
Successfully installed URI-1.67
1 distribution installed
  1. Я возвращаюсь к тому, что я изначально хотел, а именно URI::ws, и вот что я получаю:
hamid@caspian:~$ /home/hamid/perl5/perlbrew/bin/cpanm URI::ws
--> Working on URI::ws
Fetching http://www.cpan.org/authors/id/P/PL/PLICEASE/URI-ws-0.03.tar.gz ... OK
Configuring URI-ws-0.03 ... OK
==> Found dependencies: URI
--> Working on URI
Fetching http://www.cpan.org/authors/id/E/ET/ETHER/URI-1.67.tar.gz ... OK
Configuring URI-1.67 ... OK
Building and testing URI-1.67 ... OK
Successfully installed URI-1.67
! Installing the dependencies failed: Module 'URI' is not installed
! Bailing out the installation for URI-ws-0.03.
1 distribution installed

Может ли кто-нибудь сказать мне, почему это происходит и что я могу сделать, чтобы остановить это? Если вам нужна дополнительная информация, которую я пропустил, пожалуйста, дайте мне знать.

Спасибо


person Hamster    schedule 10.03.2015    source источник
comment
Где был установлен URI? Откуда cpanm пытался это прочитать?   -  person choroba    schedule 10.03.2015
comment
@choroba : hamid@caspian:~$ perl -MURI -e 'print $INC{Time/HiRes.pm}' Не удается найти URI.pm в @ INC   -  person Hamster    schedule 10.03.2015
comment
Ваш cpanm установлен в странном месте; он работает через правильный perl?   -  person friedo    schedule 10.03.2015
comment
@friedo, чтобы все работало более гладко, perlbrew может установить собственный cpanm - так что, вероятно, это нормально. Что может помешать, так это если вы смешаете свои собственные local::lib и переменные окружения, такие как $PERL5LIB, с perlbrew's окружение (конечно, можно использовать local::lib окружения внутри perlbrew с помощью команды lib). @Hamster установлен ли URI для версии perl, которую использует ваш perlbrew? (т.е. — это файлы, присутствующие в иерархии каталогов perlbrew).   -  person G. Cito    schedule 10.03.2015
comment
@ G.Cito Я использую последнюю версию Perl (5.20.2), и нет, find ~/perl5/perlbrew/ -name "*URI*" ничего мне не дает   -  person Hamster    schedule 10.03.2015
comment
Похоже, он где-то устанавливается :-) Все ли установлены правильные переменные PERLBREW_ env? Что-нибудь вроде PERL_CPANM_OPT , PERL_LOCAL_LIB_ROOT или PERL5LIB, присутствующее в вашей среде, может все портить?   -  person G. Cito    schedule 10.03.2015


Ответы (2)


Благодаря https://stackoverflow.com/users/2019415/g-cito

hamid@caspian:~$ PERL_MM_OPT=""; PERL_MB_OPT="";

сделал дело :)

local::lib все испортил. URI.pm был установлен, но не в каталоге perlbrew.

person Hamster    schedule 10.03.2015
comment
Если вы настроили local::lib, вам следует проверить .bashrc (или эквивалент для вашей оболочки); PERL_MM_OPT и PERL_MB_OPT, вероятно, установлены там. - person ThisSuitIsBlackNot; 10.03.2015
comment
Добавлены комментарии в качестве ответа, если вы хотите его принять :-) Обязательно прислушайтесь к совету @ThisSuitIsBlackNot ++ - person G. Cito; 10.03.2015

С помощью perlbrew вы можете установить специфичный для perlbrew cpanm, который упрощает установку на различные perls/, которые устанавливаются/управляются с помощью инструмента perlbrew. Я обнаружил, что это работает очень хорошо.

Однако perlbrew может запутаться, если вы смешаете свой собственный local::lib и установите связанные переменные среды, такие как PERL5LIB, PERL_MM_OPT, PERL_MB_OPT и т. д. (см., например, сообщение @cjm в perlbrew и local::lib одновременно?). Некоторые из этих переменных среды могут взаимодействовать и мешать собственной среде perlbrew, поэтому обычно лучше избегать их смешивания или просто позволить perlbrew управлять средой, используя свои собственные версии этих переменных.

Конечно, можно использовать local::lib среды "внутри" perlbrew с помощью команды lib) и делать очень сложные вещи для тестирования с разными версиями perl, поставляя приложение с требованиями (cf Carton). В моей собственной среде я мог управлять системным perl; пользователь установил local::lib, который использовал системный perl; и огромный набор perlbrew perl с разумным использованием переменных окружения (к счастью, это временная настройка при переходе между версиями).

Такая установка может очень быстро усложниться, и ее трудно воспроизвести. Одним из величайших преимуществ perlbrew является то, что вы можете легко настроить соответствующие среды Perl на нескольких машинах; или разные среды Perl на одной машине.

person G. Cito    schedule 10.03.2015