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