Как использовать зависимость от модуля Perl, установленного в нестандартном месте? - PullRequest
3 голосов
/ 18 июня 2010

Мне нужно установить два модуля Perl на веб-хостинг. Давайте назовем их A :: B и X :: Y. X :: Y зависит от A :: B (для запуска требуется A :: B). Оба они используют Module :: Install . Я успешно установил A :: B в несистемное расположение, используя

perl Makefile.PL PREFIX=/non/system/location
make; make test; make install

Теперь я хочу установить X :: Y, поэтому я пытаюсь сделать то же самое

perl Makefile.PL PREFIX=/non/system/location

Выход

$ perl Makefile.PL PREFIX=/non/system/location/
Cannot determine perl version info from lib/X/Y.pm
*** Module::AutoInstall version 1.03
*** Checking for Perl dependencies...
[Core Features]
- Test::More          ...loaded. (0.94)
- ExtUtils::MakeMaker ...loaded. (6.54 >= 6.11)
- File::ShareDir      ...loaded. (1.00)
- A::B                ...missing.
==> Auto-install the 1 mandatory module(s) from CPAN? [y] 

Кажется, он не может найти A :: B в системе, хотя он установлен, и когда он пытается автоматически установить модуль из CPAN, он пытается записать его в системный каталог (игнорируя PREFIX). Я пытался использовать переменные, такие как PERL_LIB и LIB в командной строке, после PREFIX=..., но ничего, что я сделал, похоже, не работает.

Я могу сделать make и make install успешно, но я не могу сделать make test из-за этой проблемы. Есть предложения?

Я нашел несколько советов на http://servers.digitaldaze.com/extensions/perl/modules.html, чтобы использовать переменную окружения PERL5LIB, но это также, похоже, не работает:

export PERL5LIB=/non/system/location/lib/perl5/

не решил проблему.

Ответы [ 3 ]

0 голосов
/ 18 июня 2010

Ответ local :: lib , но вы, вероятно, уже знаете, что :)

0 голосов
/ 17 июля 2017

Потому что это верхняя ссылка, которую я решил обновить с моим опытом (что заняло некоторое время, чтобы начать работу, следовательно, обновление 7-летнего поста).

первый запуск perl -le 'print join $/, @INC'

add (примечание, нет / в конце !!) export PERL5LIB=/nonstddir/scripts/modules/lib/site_perl:/nonstddir/scripts/modules/lib

run perl -le 'print join $/, @INC' убедитесь, что добавлены новые каталоги.это заставляет это работать.если вы добавите / в конце пути, запись INC будет выглядеть странно и неправильно.У меня была // посередине.

Когда все сделано и работает, моя выглядит как

/nonstddir/scripts/modules/lib/site_perl/5.8.4/sun4-solaris-64int
/nonstddir/scripts/modules/lib/site_perl/5.8.4
/nonstddir/scripts/modules/lib/site_perl
/nonstddir/scripts/modules/lib/sun4-solaris-64int
/nonstddir/scripts/modules/lib
/usr/perl5/5.8.4/lib/sun4-solaris-64int
/usr/perl5/5.8.4/lib
/usr/perl5/site_perl/5.8.4/sun4-solaris-64int
/usr/perl5/site_perl/5.8.4
/usr/perl5/site_perl
/usr/perl5/vendor_perl/5.8.4/sun4-solaris-64int
/usr/perl5/vendor_perl/5.8.4
/usr/perl5/vendor_perl
0 голосов
/ 18 июня 2010

ОК, следующий рецепт сделал это:

perl Makefile.PL --skipdeps --no-manpages PREFIX=/non/system/location INSTALLSITELIB=/non/system/location/lib INSTALLSITEBIN=/non/system/location/bin INSTALLMAN1DIR=/non/system/location/man/man1 INSTALLMAN3DIR=/non/system/location/man/man3

Это просто "Обезьяна смотри, обезьяна делает", но теперь make test работает.

  • Опция --skipdepsздесь подавляется удобная функция / раздражающая проблема с Module :: Install, где он пытается использовать CPAN.pm для загрузки отсутствующих модулей.
  • --no-manpages должен остановить установку справочных страниц, но он не работает.
...