Ручная установка модуля Perl

Я загрузил модуль Digest::SHA1 и извлек его в каталог (../ Digest-SHA1-2.13/) , затем скопировал все SHA1.* файлы в (../ Digest-SHA1-2.13 / дайджест)

и в скрипте perl я сделал : используйте Digest:: SHA1; запуск скрипта выглядит так:

perl -I ../Digest-SHA1-2.13/Digest perlscriptname.pl

я получаю эту ошибку:

Can't locate loadable object for module Digest::SHA1 in @INC

Я предполагаю, что это имеет какое-то отношение к общей библиотеке (*.Итак)? Я понятия не имею, как продолжить.

я могу установить его непосредственно используя модуль CPAN (- MCPAN), так как у меня нет разрешений на этом сервере для этого и я могу установить только локально (где работает приложение). Моя конечная цель-использовать Algorithm::CouponCode зависит от Digest::SHA1

самое странное, что у меня есть Digest::SHA1 установлен (perl -MDigest::SHA1 -e 'print $Digest::SHA1::VERSION' показывает версию 2.11), еще Algorithm::CouponCode (который устанавливается так же, как я сделал с Digest::SHA1) жалуется, что может найти его в @INC

спасибо!

3 ответов


используйте этот рецепт для ручной установки модулей Perl:

tar zxf Digest-SHA1-2.13.tar.gz
cd Digest-SHA1-2.13
perl Makefile.PL
make
make test
make install

обратите внимание, что некоторые дистрибутивы имеют вместо 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


существует два вида модуля Perl: pure-Perl и XS. Модули Pure-Perl полностью записываются на Perl и обычно могут быть установлены только путем копирования .pm файлы в соответствующий каталог. Модули XS записываются как на Perl, так и на C (XS обрабатывается в C-код с помощью ExtUtils:: ParseXS module) и требуют компилятора C для их установки.

как сказал dsolimano, самый простой способ установить модули 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, не находится в соответствующем месте.


любая причина, по которой вы не можете использовать local:: lib?

создайте и используйте локальные модули lib / for perl с PERL5LIB

это в основном инструмент, который поможет вам использовать частный (не общесистемный) каталог в качестве каталога библиотеки Perl.

после его настройки вы можете запустить команду, например

perl -MCPAN -Mlocal::lib -e 'CPAN::install(Algorithm::CouponCode)'

и тогда ваш скрипт будет использовать свою локальную копию Algorithm::CouponCode).