モジュールのインストールについてのメモ

by Hippo2000(2000/7/6
8/6更新)

とりあえず紹介というか目安というか...。まずは書いてみて、あとで突っ込まれて修正しようかと思っているのですが。

更新履歴:

2002/1/22 : 指摘を受けて、解凍してコピーで誤字を修正+リンクを修正


目次

1.インストールまでの流れ
1.1 モジュールの特定
1.2 モジュールが既にインストールされていないか
1.3 PPM
1.4 モジュールのビルド
1.5 解凍してコピー

2. ビルドについてのエトセトラ
2.1 普通のユーザでモジュールをインストール
2.2 スタティックリンク

3. リンク集


1.インストールまでの流れ

そんなモジュールをインストールするまでの流れを図にすると以下のようになります。

 

それぞれの内容について説明します。

1.1 モジュールの特定

それが何と言う名前のモジュールなのかがわからないとインストールしようがありません。

特にNet::FTPやDBI::Proxyserverのように他のモジュールと一緒に配布されている場合、ダウンロードしようにもお目当てのモジュールが見つからないということもあります。

CPANではモジュールの一覧を提供しています。またCPAN Searchで全文検索を利用することもできます。

1.2 モジュールの確認

もしかしたら利用しようとしているモジュールは既にインストールされているかもしれません。

モジュールがあるかどうかを調べるにはいくつかの方法があります。

(1)perldocでドキュメントを検索する

perldoc モジュール名

例えば
perldoc DBI
perldoc XML::Parser

CPANモジュールには基本的にPOD形式で、そのモジュールのドキュメントを入っているはず。
そこでperldocでドキュメントを表示させるというのが一番簡単でしょう。

またインストールされている場所が知りたい場合には

perldoc -l モジュール名

とするとフルパスが表示されます。

(2) perlから実際に使ってみる

perl -Mモジュール名

かなり原始的ですが、もっとも簡単で確実です。指定したモジュールが存在すれば標準入力からの入力待ちになります。なければINCパスを含んだエラーメッセージが表示されます。わざとない名前を指定して、INCパスの設定がどうなっているかをチェックすることもできます。

またCPANはすべての*.pmにVERSIONを入れる決まりになっています(http://www.cpan.org/modules/04pause.html#conventions)。そこで

perl -Mモジュール名 -e'print $モジュール名::VERSION'
(DOS系では perl -Mモジュール名 -e"print $モジュール名::VERSION")

例; perl -MXML::Parser -e'print $XML::Parser::VERSION'

とすることで、そのモジュールのバージョンの確認をすることができます。

(3)perllocalでインストールの記録を調べる

モジュールはインストールされるとperllocal.podに記録され、それは以下のようにして見ることが出来ます、

perldoc perllocal

ログなので、それまでの記録を確認するといった意味の方が大きいでしょう。なおActivePerlのPPMでインストールした分はこちらに記録されないようです。

このほかINCパスに存在するファイルを検索するなどの方法が考えられます。

1.3 PPM

PPM(Perl Package Manager)は、ActivePerlで提供されているパッケージ管理のためのインターフェースです。パッケージのインストール、アンインストール、最新版への更新するといったことがコマンド1つで簡単にできます。

Windowsの場合、コンパイル環境を持っていることがあまり多いとはいえませんが、コンパイルが済んだそのままインストールできる形式で提供されているのでコンパイル環境を持っていなくてもモジュールを利用することができます。ActiveStateのほかいくつかのサイトで提供されています。

PPM自体の使い方はとても簡単ですが、Proxyが設定されている場合などは環境変数の設定が必要です。

なお全てのモジュールがPPM形式で提供されているわけではありません。また5.6(Build6*)と5.005(Build5*)では形式が異なります。

詳しくはActivePerlのドキュメントをご覧ください。

 

1.4 モジュールのビルド

これが本来最も通常の方法です。ビルドするために開発環境(Cのコンパイル環境)が必要になります。

以下のような手順を踏むのが一般的です:

  1. CPANからダウンロードし、gzip、tarなどを使って解凍する。
  2. perl Makefile.PL
  3. make
  4. make test
  5. (rootになるなどして)make install 

ただし、手順はモジュールによって違う場合もあります。他のPerlモジュールやGD.pmのように他のCのライブラリを取得しなければならない場合もあります。

何はともあれ添付されるREADMEやinstallといったファイルを読んでください。

さらにCPAN.pmというモジュールが提供されており、依存するモジュールもまとめてダウンロードし、インストールしてくれるそうです。
(私自身は使ったことないので紹介だけですが)

 

1.5 解凍してコピー

対象となっているモジュールがXSインターフェースを利用していない場合、コピーするだけで使えるようになります。

READMEなどで特に説明されていない場合を除けば、緊急手段だと思った方がよいでしょう。

  1. CPANからダウンロードし、gzip、tarなどを使って解凍します。
  2. INCパスを調べて、どのディレクトリにインストールするかを決めます。
    コマンドラインから以下のコマンドを実行します。

    UNIX系であれば   : perl -le 'print join $/, @INC'
    Windows系であれば: perl -le "print join $/, @INC" (Windows系)
  3. pmファイルを探し、対応するディレクトリにコピーします。
     DBIのように何も修飾しないもの    :当該ディレクトリの直下に置きます
     DBD::CSVのように修飾されているもの:"DBD"というディレクトリを作って、その中に入れます

2. ビルドに関するエトセトラ

makeコマンドを使ってビルドするときの応用編です。

ラクダ本(「プログラミングPerl 」)のExtUtils::MakeMakerを一度は目を通すようにしてください。

2.1 普通のユーザでモジュールをインストールする

CPANモジュールをインストールするさい、デフォルトではPerl作成時の設定(Config)で決められた共通のディレクトリにンストールされます。そのためきちんとセキュリティが掛けられるOSでは、Perlをインストールしたユーザや特権ユーザでなければ、書込み権限を持たないために、そのままではモジュールをインストールすることができません。

また特に問題にはなりませんが、「make install」は共通のインストール先に入っているperllocal.podに記録を追記しようとするため、これについてのエラーが表示されます。

この2つの問題を回避する方法を以下に示します。

(1) インストール先の変更

「perl Makefile.PL」によって作成されるMakefileのうちインストール先に直接関係する箇所はPREFIX、INSTALLDIRS、INSTALLSITELIBなどの設定です。

Makefileの抜粋(例)

(中略)
PREFIX = /export/home/kawai
INSTALLDIRS = site
INSTALLPRIVLIB = $(PREFIX)/lib/perl5/5.00503
INSTALLARCHLIB = $(PREFIX)/lib/perl5/5.00503/sun4-solaris
INSTALLSITELIB = $(PREFIX)/lib/perl5/site_perl/5.005
INSTALLSITEARCH = $(PREFIX)/lib/perl5/site_perl/5.005/sun4-solaris
INSTALLBIN = $(PREFIX)/bin
INSTALLSCRIPT = $(PREFIX)/bin
(中略)

関連する設定の意味はだいたい以下の通りです。詳しくはExtUtils::MakeMakerのドキュメントをご覧下さい(ラクダ本にもあります)

名前

説明

INSTALLDIRS "perl"または"site"かどちらの値を取ります。
perlの場合はinstallprivlibとinstallarchlibが、siteの場合はinstallsitelibとinstallsitearchがインストール先に選べれますなります。デフォルトはsiteです。
INSTALLPRIVLIB INSTALLDIRSがperlのときの、pmファイルなどのインストール先。
INSTALLARCHLIB INSTALLDIRSがperlのときの、モジュールのアーキテクチャ依存部分のインストール先。
INSTALLSITELIB INSTALLDIRSがsiteのときの、pmファイルなどのインストール先。
INSTALLSITEARCH INSTALLDIRSがsiteのときの、モジュールのアーキテクチャ依存部分のインストール先。
INSTALLMAN1DIR マニュアルページの格納先(man1対応:コマンドの説明)
INSTALLMAN3DIR マニュアルベージの格納先(man3対応:モジュール、ライブラリの説明)

設定値の変更は、Makefile.PLの後ろに「名前=値」の組を追加して実行することによって行えます。インストール先を変更するとき、大きく2つの方法が考えられます。

1) PREFIXを変更する

PREFIXを変更すると、上記の抜粋からもわかるようにINSTALL*の設定がまとめて変更することができます。作成時に指定することは少なく、漏れもないというメリットがあります。ただインストール先わかりにくく、階層が深いことから実際の利用ではちょっと面倒かもしれません。

ex. PREFIXをホームディレクトリに設定してMakefileを作成
perl Makefile.PL PREFIX=~

2) INSTALLSITEDIR、INSTALLMAN3DIRを変更する。

モジュールのインストールに、直接関係する設定はINSTALLSITEDIR、INSTALLMAN3DIRです。またあまりないケースですがDBIでのdbishのように、コマンドが同梱されている場合にはINSTALLMAN1DIRも設定したほうがよいかも知れません。

ex. INSTALLSITELIB、INSTALLMAN3DIRを指定してMakefileを作成
perl Makefile.PL INSTALLSITELIB=~/lib INSTALLMAN3DIR=~/man3

(2).perllocal.podへの追記の抑止

特権を持たないユーザがmake installとすると以下のようなエラーが表示されます。

/bin/sh: /export/home/kawai/lib/perl5/5.00503/sun4-solaris/perllocal.pod: 作成できません

これは「make install」をするとperllocal.podにモジュール・インストールの記録を追加するためです。(podという名前からもわかるように、「perldoc perllocal」とするとモジュール・インストールの記録を読むことができます。)

これが表示する前に実際のインストールは終了していますし、直接影響はありません。また「make pure_install」とするとperllocal.podへの追記は行われなくなり、結果このエラーも表示されなくなります。

(3)実行例

実際にどのように実行したイメージとしてCGI::Persistentをインストールしたときの記録です。

なおCGI::Persistentを利用するためには別にObject-Persistenceをインストールする必要があります。

1)PREFIXをホームディレクトリに設定してMakefileを作成

cloudy% perl Makefile.PL PREFIX=~
Checking if your kit is complete...
Looks good
Writing Makefile for CGI::Persistent
cloudy% make
mkdir blib
mkdir blib/lib
mkdir blib/lib/CGI
mkdir blib/arch
mkdir blib/arch/auto
mkdir blib/arch/auto/CGI
mkdir blib/arch/auto/CGI/Persistent
mkdir blib/lib/auto
mkdir blib/lib/auto/CGI
mkdir blib/lib/auto/CGI/Persistent
mkdir blib/man3
cp lib/CGI/Persistent.pm blib/lib/CGI/Persistent.pm
Manifying blib/man3/CGI::Persistent.3
/usr/local/bin/pod2man: lib/CGI/Persistent.pm is missing required section: DESCR
IPTION
cloudy% make pure_install
Warning: You do not have permissions to install into /usr/local/lib/perl5/5.0050
3/man/man3 at /usr/local/lib/perl5/5.00503/ExtUtils/Install.pm line 61.
Installing /export/home/kawai/lib/perl5/site_perl/5.005/CGI/Persistent.pm
Installing /usr/local/lib/perl5/5.00503/man/man3/CGI::Persistent.3
Writing /export/home/kawai/lib/perl5/site_perl/5.005/sun4-solaris/auto/CGI/Persi
stent/.packlist

2)実行(バージョンの表示)

cloudy% perl -I$HOME/lib/perl5/site_perl/5.005 -MCGI::Persistent -e'print "$CGI:
:Persistent::VERSION\n"'
0.21

(2)INSTALLSITELIB、INSTALLMAN3DIRの指定

1)インストール

cloudy% perl Makefile.PL INSTALLSITELIB=~/lib INSTALLMAN3DIR=~/man3
Checking if your kit is complete...
Looks good
Writing Makefile for CGI::Persistent
cloudy% make
mkdir blib
mkdir blib/lib
mkdir blib/lib/CGI
mkdir blib/arch
mkdir blib/arch/auto
mkdir blib/arch/auto/CGI
mkdir blib/arch/auto/CGI/Persistent
mkdir blib/lib/auto
mkdir blib/lib/auto/CGI
mkdir blib/lib/auto/CGI/Persistent
mkdir blib/man3
cp lib/CGI/Persistent.pm blib/lib/CGI/Persistent.pm
Manifying blib/man3/CGI::Persistent.3
/usr/local/bin/pod2man: lib/CGI/Persistent.pm is missing required section: DESCR
IPTION
cloudy% make pure_install
Installing /export/home/kawai/lib/CGI/Persistent.pm
Installing /export/home/kawai/man3/CGI::Persistent.3
Writing /export/home/kawai/lib/auto/CGI/Persistent/.packlist

2)実行(バージョンを表示)

cloudy% perl -I$HOME/lib -MCGI::Persistent -e'print "$CGI::Persistent::VERSION
\n"'
0.21

 

2.2 スタティックリンク

ダイナミックリンクをサポートしているOSではこれだけなのですが、ダイナミックリンクをサポートしていないOSではモジュール(そのCで書かれた部分)をスタティックリンクする必要があります。またダイナミックリンクをサポートしているOSでも、スタティックリンクのほうが安定しているためや実行スピードが若干早いことからスタティックリンクをすることがあるようです。

ラクダ本のExtUtils::MakeMakerの説明によれば、LINKTYPE=staticでMakefileを作るとモジュールをスタティックリンクしたPerlが作成できます。自分でもやってみました。きちんとできているかどうかちょっと心配なのですが...

手順としては4つの段階があります

(1) Makefileの作成

例: 
perl Makefile.PL MAP_TARGET=kbperl LINKTYPE=static INSTALLSITELIB=~/libs INSTALLMAN3DIR=~/man3

このときのLINKTYPE=staticというがミソですね。ここではMAP_TARGETはPerl以外の名前を指定しています。

(2) モジュールの作成

make

これでモジュールのライブラリが作成されるようです。

(3) モジュールのインストール

make pure_install

作成されたライブラリやpmファイルがインストールされます。

(4) Perlの作成

make kbperl

上記(1)でMAP_TARGETで指定した名前を指定します。これで作成される実行ファイルを利用してください。使い方は普通のPerlと一緒です。

例:kbperl -I$HOME/libs -MXML::Parser -e'print "$XML::Parser::Expat::VERSION\n"'

スタティックリンクの実行例:

XML::Parserをスタティックリンクした実行例です。入力したところはイタリックにしています。

cloudy% perl Makefile.PL MAP_TARGET=kbperl LINKTYPE=static INSTALLSITELIB=~/libs
INSTALLMAN3DIR=~/man3

Writing Makefile for XML::Parser::Expat
Writing Makefile for XML::Parser
cloudy% make
make[1]: Entering directory `/export/home/kawai/XML-Parser-2.29/Expat'
cc -B/usr/ccs/bin/ -B/usr/ccs/bin/ -c -Iexpat/xmltok -Iexpat/xmlparse -I/usr/loc
al/include -O -DVERSION=\"2.29\" -DXS_VERSION=\"2.29\" -fPIC -I/usr/local/lib
/perl5/5.00503/sun4-solaris/CORE -DXML_NS -DXML_DTD -DXML_CONTEXT_BYTES=512 -DXM
L_BYTE_ORDER=21 -o Expat.o Expat.c
cc -B/usr/ccs/bin/ -B/usr/ccs/bin/ -c -Iexpat/xmltok -Iexpat/xmlparse -I/usr/loc
al/include -O -DVERSION=\"2.29\" -DXS_VERSION=\"2.29\" -fPIC -I/usr/local/lib
/perl5/5.00503/sun4-solaris/CORE -DXML_NS -DXML_DTD -DXML_CONTEXT_BYTES=512 -DXM
L_BYTE_ORDER=21 -o expat/xmltok/xmltok.o expat/xmltok/xmltok.c
cc -B/usr/ccs/bin/ -B/usr/ccs/bin/ -c -Iexpat/xmltok -Iexpat/xmlparse -I/usr/loc
al/include -O -DVERSION=\"2.29\" -DXS_VERSION=\"2.29\" -fPIC -I/usr/local/lib
/perl5/5.00503/sun4-solaris/CORE -DXML_NS -DXML_DTD -DXML_CONTEXT_BYTES=512 -DXM
L_BYTE_ORDER=21 -o expat/xmltok/xmlrole.o expat/xmltok/xmlrole.c
cc -B/usr/ccs/bin/ -B/usr/ccs/bin/ -c -Iexpat/xmltok -Iexpat/xmlparse -I/usr/loc
al/include -O -DVERSION=\"2.29\" -DXS_VERSION=\"2.29\" -fPIC -I/usr/local/lib
/perl5/5.00503/sun4-solaris/CORE -DXML_NS -DXML_DTD -DXML_CONTEXT_BYTES=512 -DXM
L_BYTE_ORDER=21 -o expat/xmlparse/xmlparse.o expat/xmlparse/xmlparse.c
cc -B/usr/ccs/bin/ -B/usr/ccs/bin/ -c -Iexpat/xmltok -Iexpat/xmlparse -I/usr/loc
al/include -O -DVERSION=\"2.29\" -DXS_VERSION=\"2.29\" -fPIC -I/usr/local/lib
/perl5/5.00503/sun4-solaris/CORE -DXML_NS -DXML_DTD -DXML_CONTEXT_BYTES=512 -DXM
L_BYTE_ORDER=21 -o expat/xmlparse/hashtable.o expat/xmlparse/hashtable.c
rm -rf ../blib/arch/auto/XML/Parser/Expat/Expat.a
ar cr ../blib/arch/auto/XML/Parser/Expat/Expat.a Expat.o expat/xmltok/xmltok.o e
xpat/xmltok/xmlrole.o expat/xmlparse/xmlparse.o expat/xmlparse/hashtable.o && :
../blib/arch/auto/XML/Parser/Expat/Expat.a
chmod 755 ../blib/arch/auto/XML/Parser/Expat/Expat.a
Manifying ../blib/man3/XML::Parser::Expat.3
make[1]: Leaving directory `/export/home/kawai/XML-Parser-2.29/Expat'
Manifying blib/man3/XML::Parser.3
cloudy% make pure_install
Installing /export/home/kawai/libs/auto/XML/Parser/extralibs.all
Installing /export/home/kawai/libs/auto/XML/Parser/Expat/Expat.a
Installing /export/home/kawai/libs/auto/XML/Parser/Expat/extralibs.ld
Files found in blib/arch --> Installing files in blib/lib into architecture depe
ndend library tree!
Installing /export/home/kawai/libs/XML/Parser/Encodings/iso-8859-4.enc
Installing /export/home/kawai/libs/XML/Parser/Encodings/iso-8859-5.enc
Installing /export/home/kawai/libs/XML/Parser/Encodings/x-euc-jp-jisx0221.enc
Installing /export/home/kawai/libs/XML/Parser/Encodings/iso-8859-7.enc
Installing /export/home/kawai/libs/XML/Parser/Encodings/iso-8859-8.enc
Installing /export/home/kawai/libs/XML/Parser/Encodings/x-sjis-cp932.enc
Installing /export/home/kawai/libs/XML/Parser/Encodings/iso-8859-9.enc
Installing /export/home/kawai/libs/XML/Parser/Encodings/x-sjis-jdk117.enc
Installing /export/home/kawai/libs/XML/Parser/Encodings/x-euc-jp-unicode.enc
Installing /export/home/kawai/libs/XML/Parser/Encodings/windows-1250.enc
Installing /export/home/kawai/libs/XML/Parser/Encodings/big5.enc
Installing /export/home/kawai/libs/XML/Parser/Encodings/euc-kr.enc
Installing /export/home/kawai/libs/XML/Parser/Encodings/README
Installing /export/home/kawai/libs/XML/Parser/Encodings/x-sjis-jisx0221.enc
Installing /export/home/kawai/libs/XML/Parser/Encodings/Japanese_Encodings.msg
Installing /export/home/kawai/libs/XML/Parser/Encodings/x-sjis-unicode.enc
Installing /export/home/kawai/libs/XML/Parser/Encodings/iso-8859-2.enc
Installing /export/home/kawai/libs/XML/Parser/Encodings/iso-8859-3.enc
Installing /export/home/kawai/libs/XML/Parser/LWPExternEnt.pl
Installing /export/home/kawai/libs/XML/Parser/Expat.pm
Installing /export/home/kawai/libs/XML/Parser.pm
Skipping /export/home/kawai/man3/XML::Parser::Expat.3 (unchanged)
Skipping /export/home/kawai/man3/XML::Parser.3 (unchanged)
Writing /export/home/kawai/libs/auto/XML/Parser/.packlist
cloudy% make kbperl
Writing "Makefile.aperl" for this kbperl
Writing Makefile.aperl for XML::Parser
make -f Makefile.aperl kbperl
make[1]: Entering directory `/export/home/kawai/XML-Parser-2.29'
Writing perlmain.c
cd . && cc -B/usr/ccs/bin/ -B/usr/ccs/bin/ -c -I/usr/local/lib/perl5/5.00503/su
n4-solaris/CORE -I/usr/local/include -O \
-DVERSION=\"2.29\" \
-DXS_VERSION=\"2.29\" -I/usr/local/lib/perl5/5.00503/sun4-solaris/CORE perlmain.
c
cat /export/home/kawai/XML-Parser-2.29/blib/arch/auto/XML/Parser/Expat/extralibs
.ld >> blib/arch/auto/XML/Parser/extralibs.all
cat /usr/local/lib/perl5/5.00503/sun4-solaris/auto/DynaLoader/extralibs.ld >> bl
ib/arch/auto/XML/Parser/extralibs.all
cc -B/usr/ccs/bin/ -B/usr/ccs/bin/ -L/usr/local/lib -o kbperl -O ./perlmain.o
/usr/local/lib/perl5/5.00503/sun4-solaris/auto/DynaLoader/DynaLoader.a /export/h
ome/kawai/XML-Parser-2.29/blib/arch/auto/XML/Parser/Expat/Expat.a /usr/local/lib
/perl5/5.00503/sun4-solaris/CORE/libperl.a `cat blib/arch/auto/XML/Parser/extral
ibs.all` -lsocket -lnsl -ldl -lm -lc -lcrypt
cc: file path prefix `/usr/ccs/bin/' never used
To install the new "kbperl" binary, call
make -f Makefile.aperl inst_perl MAP_TARGET=kbperl
To remove the intermediate files say
make -f Makefile.aperl map_clean
make[1]: Leaving directory `/export/home/kawai/XML-Parser-2.29'


3.リンク集

名前

リンク先/説明

perlmod
perlmodlib
perlmodinstall
コマンドラインで
 perldoc perlmod
 perldoc perlmodlib
 perldoc perlmodinstall

あるいは

http://www.cpan.org/doc/manual/html/pod/perlmod.html 
http://www.cpan.org/doc/manual/html/pod/perlmodlib.html
http://www.cpan.org/doc/manual/html/pod/perlmodinstall.html 

コアperlドキュメントの一部。
下にある「スクリプティング言語研究室(仮)」さんの「Perl 5.005付属のドキュメント邦訳 」にperlmod、
perlmodlibの日本語訳があります。

CPAN.pm ドキュメント コマンドラインで
 perldoc CPAN

あるいは

http://theoryx5.uwinnipeg.ca/CPAN/data/perl/CPAN.html

CPAN.pmのドキュメントです。

CPAN: Perl Modules http://www.cpan.org/modules/index.html

CPANでのモジュールについてのページ
モジュールについてのさまざまな説明をここから読むことができます。

CPAN Search http://theoryx5.uwinnipeg.ca/CPAN/cpan-search.html

CPANモジュールの全文検索サイト。
なにしろ便利。こんなの欲しいと思ったときキーワードを指定するとすぐに探してくれます。

ActivePerl のドキュメント ActivePerlがインストールされていれば、インストールしたディレクトリの下の「html」というディレクトリ

ActivePerlのドキュメントです。ActiveStateが提供しているPPM形式をインストールすると、
そのモジュールのドキュメントも入ります。

また

http://www.activestate.com/Products/ActivePerl/docs/

からActivePerlの標準のドキュメントを見ることもできます。

スクリプティング言語研究室(仮) http://www.kt.rim.or.jp/%7ekbk/index.html

モジュール関連では
"
Perl 5.005付属のドキュメント邦訳 "にperlmod、perlmodlibの日本語訳があります。

Perl初心者の部屋 http://www.harukaze.net/~mishima/perl/index.html

モジュールのインストールについては特に
ActivePerl版 Perl for Win32 FAQ 和訳:
 http://www.harukaze.net/~mishima/perl/index.html
のperlwin32faq9とperlwin32faq12をご覧ください。


ホーム Perlの小技

ご意見、ご質問はこちらの掲示板で受け付けています。
またメールは河馬屋(Nifty)にお願いします。