Ручная установка модуля Perl
Я загрузил модуль Digest::SHA1
и извлек его в каталог (../Digest-SHA1-2.13/), а затем скопировал все файлы SHA1. * в (../Digest-SHA1-2.13/Digest)
и в perl script, я сделал: используйте Digest:: SHA1;
запуск script следующим образом:
perl -I ../Digest-SHA1-2.13/Digest perlscriptname.pl
Я получаю эту ошибку:
Can't locate loadable object for module Digest::SHA1 in @INC
Я предполагаю, что это имеет какое-то отношение к общей библиотеке (*.so)?, я понятия не имею, как продолжить здесь.
Я могу установить его напрямую с помощью модуля CPAN (-MCPAN), так как у меня нет разрешений на этом сервере, и я могу установить его только локально (там, где работает приложение).
Моя конечная цель - использовать Algorithm::CouponCode
, который зависит от Digest::SHA1
Странная часть состоит в том, что у меня установлен Digest::SHA1
(perl -MDigest::SHA1 -e 'print $Digest::SHA1::VERSION'
показывает версию 2.11), но Algorithm::CouponCode
(который установлен так же, как я сделал с Digest::SHA1
), жалуется, что он может найти его в @INC
спасибо!
Ответы
Ответ 1
Используйте этот рецепт для ручной установки модулей perl:
tar zxf Digest-SHA1-2.13.tar.gz
cd Digest-SHA1-2.13
perl Makefile.PL
make
make test
make install
Обратите внимание, что некоторые дистрибутивы будут иметь Build.PL
файл вместо Makefile.PL
. В этом случае используйте этот рецепт:
tar zxf ...
cd ...
perl Build.PL
./Build
./Build test
./Build install
(Вы можете пройти с помощью только make install
и ./Build install
.)
Если вам нужно изменить каталог установки, используйте:
perl Makefile.PL INSTALL_BASE=...
или
perl Build.PL --install_base ...
в зависимости от типа модуля.
Для получения дополнительной информации см. perldoc для ExtUtils:: MakeMaker:: FAQ и Module:: Build
Ответ 2
Любая причина, по которой вы не можете использовать local:: lib?
создать и использовать локальные модули lib/perl с PERL5LIB
Это в основном инструмент, который поможет вам использовать частный (несистемный) каталог в качестве вашего каталога библиотеки Perl.
После настройки вы можете запустить команду типа
perl -MCPAN -Mlocal::lib -e 'CPAN::install(Algorithm::CouponCode)'
а затем ваш script будет использовать вашу локально установленную копию Algorithm::CouponCode)
.
Ответ 3
Существует два типа модуля Perl: pure-Perl и XS. Модули Pure-Perl полностью написаны на Perl и обычно могут быть установлены только путем копирования файлов .pm
в соответствующий каталог. Модули XS записываются как в Perl, так и в C (XS обрабатывается в C-коде модулем ExtUtils:: ParseXS) и требует, чтобы компилятор C устанавливал их.
Как сказал дсолимано, самый простой способ установить Perl-модули для системы Perl, когда у вас нет корневого доступа, - это использовать local:: lib. (Вы можете делать то же самое, что local::lib
делает сам, но зачем беспокоиться?)
Причина, по которой Digest::SHA1
работает сама по себе, но не тогда, когда вы используете Algorithm::CouponCode
, заключается в том, что в системе Perl уже установлена версия 2.11 из Digest::SHA1
. Когда вы используете -I ../Digest-SHA1-2.13/Digest
, тогда use Digest::SHA1
выбирает код Perl из.. /Digest -SHA1-2.13/Digest, но общая библиотека, которая будет создана из кода XS, не находится в соответствующем месте.