by Hippo2000(2000/7/6
8/6更新)
とりあえず紹介というか目安というか...。まずは書いてみて、あとで突っ込まれて修正しようかと思っているのですが。
更新履歴:
2002/1/22 : 指摘を受けて、解凍してコピーで誤字を修正+リンクを修正
そんなモジュールをインストールするまでの流れを図にすると以下のようになります。

それぞれの内容について説明します。
それが何と言う名前のモジュールなのかがわからないとインストールしようがありません。
特にNet::FTPやDBI::Proxyserverのように他のモジュールと一緒に配布されている場合、ダウンロードしようにもお目当てのモジュールが見つからないということもあります。
CPANではモジュールの一覧を提供しています。またCPAN Searchで全文検索を利用することもできます。
もしかしたら利用しようとしているモジュールは既にインストールされているかもしれません。
モジュールがあるかどうかを調べるにはいくつかの方法があります。
(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パスに存在するファイルを検索するなどの方法が考えられます。
PPM(Perl Package Manager)は、ActivePerlで提供されているパッケージ管理のためのインターフェースです。パッケージのインストール、アンインストール、最新版への更新するといったことがコマンド1つで簡単にできます。
Windowsの場合、コンパイル環境を持っていることがあまり多いとはいえませんが、コンパイルが済んだそのままインストールできる形式で提供されているのでコンパイル環境を持っていなくてもモジュールを利用することができます。ActiveStateのほかいくつかのサイトで提供されています。
PPM自体の使い方はとても簡単ですが、Proxyが設定されている場合などは環境変数の設定が必要です。
なお全てのモジュールがPPM形式で提供されているわけではありません。また5.6(Build6*)と5.005(Build5*)では形式が異なります。
詳しくはActivePerlのドキュメントをご覧ください。
これが本来最も通常の方法です。ビルドするために開発環境(Cのコンパイル環境)が必要になります。
以下のような手順を踏むのが一般的です:
|
ただし、手順はモジュールによって違う場合もあります。他のPerlモジュールやGD.pmのように他のCのライブラリを取得しなければならない場合もあります。
何はともあれ添付されるREADMEやinstallといったファイルを読んでください。
さらにCPAN.pmというモジュールが提供されており、依存するモジュールもまとめてダウンロードし、インストールしてくれるそうです。
(私自身は使ったことないので紹介だけですが)
対象となっているモジュールがXSインターフェースを利用していない場合、コピーするだけで使えるようになります。
READMEなどで特に説明されていない場合を除けば、緊急手段だと思った方がよいでしょう。
|
makeコマンドを使ってビルドするときの応用編です。
ラクダ本(「プログラミングPerl 」)のExtUtils::MakeMakerを一度は目を通すようにしてください。
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
ダイナミックリンクをサポートしている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'
名前 |
リンク先/説明 |
|---|---|
| perlmod perlmodlib perlmodinstall |
コマンドラインで perldoc perlmod perldoc perlmodlib perldoc perlmodinstall あるいは http://www.cpan.org/doc/manual/html/pod/perlmod.html コアperlドキュメントの一部。 |
| 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初心者の部屋 | http://www.harukaze.net/~mishima/perl/index.html モジュールのインストールについては特に |
ご意見、ご質問はこちらの掲示板で受け付けています。
またメールは河馬屋(Nifty)にお願いします。