Ручная установка модуля Perl - PullRequest
14 голосов
/ 24 сентября 2011

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

и в скрипте perl я сделал: use Digest :: SHA1;запускаю скрипт так:

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

спасибо!

Ответы [ 3 ]

27 голосов
/ 25 сентября 2011

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

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

Обратите внимание, что в некоторых дистрибутивах вместо Makefile.PL будет файл Build.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

4 голосов
/ 25 сентября 2011

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

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

3 голосов
/ 24 сентября 2011

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

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

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

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

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

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

...