ActivePerl+PPMによるモジュールインストール方法。
Windows、Linux等にActiveState社が提供しているPerl環境「ActivePerl」では、モジュールを「PPM」というツールでインストールできます。 このPPMについてのメモを載せていきます。
PPMに何か問題があれば、CPANも試してみてください。 CPANでは、PPMではインストールできないモジュール、より新しいモジュールをインストールできることが多々あります。 CPANについては、Perlモジュール/インストール(CPAN)にまとめてあります。
コマンドラインから、下のコマンドを叩くだけです。
ppm install パッケージ名
多くのパッケージ名には、「::」または「-」が含まれますが、これはどちらを使用しても構いません。 例えば、「CGI-Lite」と「CGI::Lite」では、どちらの書式でも同じものがインストールされます。
なお、厳密に言えば、ハイフンを使うのが正解です。
例えば「ppm install XML-RSS」とするとXML::RSSモジュールがインストールされますが、「ppm install XML:RSS」とした場合は「XML::RSS」で始まるモジュールが検索され、複数あるためこの候補が一覧されて終わります。 「CGI::Lite」と「CGI-Lite」のケースでは、「CGI::Lite」で始まるモジュールが一つしかないので、どちらでもCGI::Liteモジュールがインストールされます。
コマンドラインから、下のコマンドを叩くだけです。
ppm remove パッケージ名
Windows版のActivePerl build630にはHTMLドキュメントがつきません。 代わりにHTMLヘルプがついたのですが、「HTMLドキュメントも欲しい」という時は、PPMでダウンロードできます。
ppm install ActivePerl-HTML
全文検索の「Namazu」などを使っていると必要ですね。 ダウンロードサイズで、2001年11月19日現在の版は2,376,940バイトあります。
ActivePerl build631では、ふたたびHTMLドキュメントが同梱されるようになりました。
PPMでのインストールは、大雑把に言えば、コンパイル済みのバイナリが取得され、適切なフォルダにコピーされるだけです。 ほとんど、失敗の余地はありません。
それでも失敗する場合、多くのケースではファイルの取得に失敗しています。 以下の2点を確認して下さい。
なお、SoftWareのページで配布しているINCMプラグイン「PPMプラグイン」ではこの2点を対処しています。 INCMをお持ちであれば、試してみると良いでしょう。
インターネットに接続する際に、プロキシを通す環境では、プロキシ関連の環境変数HTTP_PROXYの設定が必要です。 この点は、PPMのドキュメントに明記されています。
Windowsを利用している場合、autoexec.batか、あるいはマイコンピュータのプロパティを開き、詳細タブの環境変数でで設定しておくと毎回指定する手間が不要になります。
PPMがモジュールを探しに行くURLが「リポジトリ」です。デフォルトではActiveStateの提供するリポジトリだけが登録されています。
ところが、例えばCrypt::SSLeay(LWPモジュールでHTTPSアクセスするときなどに必要)をインストールしようとすると、上記のリポジトリではこのモジュールが提供されていません。こんな時には適切なリポジトリ、この場合であればUniversity of Winnipegのリポジトリを追加する必要があります。(Crypt関連のモジュールやGDモジュールなどはこちらからインストールするように、ActiveStateのサイトでも説明されています)。
ただし,Perlのバージョンと適合したリポジトリを利用する必要があります。
Perl 5.6用の、University of Winnipegのリポジトリは次のURLです。
http://theoryx5.uwinnipeg.ca/ppmpackages/
Perl 5.8用の、University of Winnipegのリポジトリは次のURLです。
http://theoryx5.uwinnipeg.ca/ppms/
Perl 5.10用の、University of Winnipegのリポジトリは次のURLです。
http://cpan.uwinnipeg.ca/PPMPackages/10xx/
この他に、id:CharsbarさんがPlagger、Jifty、Catalyst、MySQLユーザ向けとして提供してくださっているリポジトリも、非常に魅力的なモジュールが多くあります。ActivePerl 5.8を使っている場合、こちらも加えておくと良いかもしれません。(現時点ではまだver 5.10には対応していません。)
http://ppm.tcool.org/server/ppmserver.cgi?urn:PPMServer
私はさらに、以下を加えることがあります。
http://www.bribes.org/perl/ppm/package.lst
リポジトリの追加方法については、後述の関連項目を確認してください。
リポジトリはモジュールが配布されているインターネット上/ローカルのディレクトリのことです。初期状態ではActiveState社の提供しているリポジトリが登録されていますが、ここにないモジュールをインストールしたい時や、ローカルのディレクトリをリポジトリとして使いたい時にはリポジトリの追加をします。
なお、この内容はActivePerlといっしょにインストールされるドキュメントの「Using PPM」のページにかかれているrepコマンドの使い方をまとめなおしたものです。
現在登録されているリポジトリは、repコマンドを実行すると表示されます。
ppm> rep [1] ActiveState PPM2 Repositry [2] ActiveState Package Repositry
"rep describe 番号"で、そのリポジトリの詳細情報を見ることができます。
ppm> rep describe 1
Describing Active Repository 1:
Name: ActiveState PPM2 Repositry
Location: http://ppm.ActiveState.com/cgibin/PPM/ppmserver-5.8-windows.pl?urn:/PPMServer
Type: PPMServer 2.0
リポジトリの追加は、rep addを使用します。外部のリポジトリを追加(通常は外部でしょう)する時には、"rep add リポジトリ名 URL"を実行します。例えば、以下のようにすると"http://theoryx5.uwinnipeg.ca/ppms/"を"theoryx5"の名前で登録できます。
ppm> rep add "theoryx5" "http://theoryx5.uwinnipeg.ca/ppms/" [1] ActiveState PPM2 Repositry [2] ActiveState Package Repositry [3] theoryx5
ローカルディレクトリをリポジトリに登録する場合も同じです。URLの代わりにディレクトリのフルパスを記述します。
ppm> rep add "local" "C:\rep" [1] ActiveState PPM2 Repositry [2] ActiveState Package Repositry [3] theoryx5 [4] local
リポジトリの削除はrep delです。この後ろにリポジトリの番号か、名前を続けると、そのリポジトリは削除されます。
ppm> rep del 3 [1] ActiveState PPM2 Repositry [2] ActiveState Package Repositry [3] theoryx5
追加したリポジトリについては、rep describeで内容を確認しておくと良いでしょう。余談ですが、ローカルディレクトリであればちゃんとTypeは「Local directory」と表示されます。
リポジトリに振られている番号は検索の優先順位です。優先順位の番号が振られていないものがあれば、そのリポジトリはオフになっています。
リポジトリのオン、オフはそのもの、rep onとrep offで行なえます。rep offではリポジトリの名前か番号で対照を指定できます。rep onでは(番号が振られていない状態なので)リポジトリ名で対象を指定します。
ppm> rep off 3 [1] ActiveState PPM2 Repositry [2] ActiveState Package Repositry [ ] theoryx5 ppm> rep on theoryx [1] ActiveState PPM2 Repositry [2] ActiveState Package Repositry [3] theoryx5
リポジトリの優先順位は、rep upとrep downで変更できます。
ppm> rep up 3 [1] ActiveState PPM2 Repositry [2] theoryx5 [3] ActiveState Package Repositry ppm> rep down 2 [1] ActiveState PPM2 Repositry [2] ActiveState Package Repositry [3] theoryx5
リポジトリの指定は、番号のほかに、リポジトリ名でも可能です。この時、リポジトリ名の先頭数文字だけを指定してもかまいません。
ppm> rep up theo [1] ActiveState PPM2 Repositry [2] theoryx5 [3] ActiveState Package Repositry
優先順位の変更は明示的にローカルからモジュールをインストールしたい時や、あるリポジトリに他のリポジトリより新しいバージョンのモジュールが置かれていることがわかっている時に活用すると良いでしょう。
ActivePerl build638ではPPM(バージョンは2.x)と、PPM3(バージョンは3.x)がインストールされ、どちらを使うかはActivePerlのインストール・ウィザードの中で指定できるようになっています。
上述の「rep」などのコマンドは、PPM3で設けられたコマンドです。 私自身はPPM3を使用していますので、上記のような説明になっています。
「PPM3を使わない」という設定でActivePerlをインストールした環境で、以下の手順でPPM(バージョン2.x)からPPM3への切り替えができました。
PPM.batは元々、PPM3を使わない設定でインストールした時点では、同ディレクトリのPPM2.batと同内容でした。 なお、こうした切り替え方が妥当なものか、確信はありません。 何かご存知でしたら、ぜひコメントをお願いします。
問題
当初 http://member.nifty.ne.jp/hippo2000/perltips/ppm.htm の内容に従いローカルに保存したモジュールの媒体をインストールしようとしました。 がなんとppmでlocationオプションが無いのでローカルファイルをリポジトリとして参照する事ができなかったのです。
ppm> rep add "LocalRepository" D:\local_m(リターン) ""内はお好きな名前で。
第二パラメータは追加したいローカルリポジトリ。
ppm> settings(リターン)
次の処理を。英数字だけで構成されているなら次は飛ばしていいです。
ppm> set tempdir D:\local_m\Temp(リターン)
展開用の仮フォルダを作成しました。
ppm> rep (リターン)
ppm> install D:\local_m\MailTools?-1.59\MailTools?.ppd(リターン)
Win32API::Registry object version 0.22 does not match bootstrap parameter 0.23 at C:/apachefriends/xampp/perl/lib/DynaLoader.pm line 253. Compilation failed in require at C:/apachefriends/xampp/perl/lib/Win32/TieRegistry.pm line 26. BEGIN failed--compilation aborted at C:/apachefriends/xampp/perl/lib/Win32/TieRegistry.pm line 26. Compilation failed in require at C:\apachefriends\xampp\perl\bin/ppm.bat line 15 BEGIN failed--compilation aborted at C:\apachefriends\xampp\perl\bin/ppm.bat line 15.
[[#comment]]