Подтвердить что ты не робот

Ручная установка модуля 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

спасибо!

4b9b3361

Ответ 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, не находится в соответствующем месте.