web-dev-qa-db-ja.com

Perlモジュールの手動インストール

モジュールDigest::SHA1をダウンロードしてディレクトリ(../Digest-SHA1-2.13/)に抽出し、すべてのSHA1。*ファイルを(../Digest-SHA1-2.13/Digest)にコピーしました

そして、Perlスクリプトでは、次のようにしました。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::CouponCodeDigest::SHA1と同じ方法でインストールされています)から、 @INCで見つける

ありがとう!

16
snoofkin

このレシピを使用して、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 を参照してください。

30
ErikR

Perlモジュールには、pure-PerlとXSの2種類があります。 Pure-Perlモジュールは完全にPerlで記述されており、通常、.pmファイルを適切なディレクトリにコピーするだけでインストールできます。 XSモジュールはPerlとCの両方で記述され(XSは ExtUtils :: ParseXS モジュールによってCコードに処理されます)、それらをインストールするにはCコンパイラが必要です。

Dsolimanoが言ったように、rootアクセスがないときにシステムPerl用のPerlモジュールをインストールする最も簡単な方法は local :: lib を使用することです。 (あなたはlocal::libが自分でするのと同じことをすることができますが、なぜ面倒なのですか?)

Digest::SHA1が単独で機能するが、Algorithm::CouponCodeを使用している場合は機能しない理由は、システムPerlにDigest::SHA1のバージョン2.11がすでにインストールされているためです。 -I ../Digest-SHA1-2.13/Digestを使用すると、use Digest::SHA1は../Digest-SHA1-2.13/DigestからPerlコードを取得しますが、XSコードからビルドされる共有ライブラリは対応する場所にありません。

4
cjm

local :: lib を使用できない理由は何ですか?

perl5LIBでPerlモジュールのローカルlib /を作成して使用する

基本的には、システム全体ではないプライベートディレクトリをPerlライブラリディレクトリとして使用するのに役立つツールです。

設定後、次のようなコマンドを実行できます

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

次に、スクリプトはローカルにインストールされたAlgorithm::CouponCode)のコピーを使用します。

3
dsolimano