ActivePerlにCPANやPPMでモジュールを導入するためのTips | to be continued ~とあるプログラマーの実験的開発日誌~

to be continued ~とあるプログラマーの実験的開発日誌~

WEBデザイナー兼プログラマーである管理人が日々のトラブル解決に向けて奮闘する開発日誌。

PerlをWindowsのローカル環境下で利用するのに便利なActivePerlにはPPMという独自のモジュールを追加する機能があり、Perl自体にもCPANという巨大なアーカイブがあって、通常であればモジュールの導入にそれほど苦労することはないのだが、半面これらにないものをインストールしようとすると、ググッてもLinuxと解説が混在していたりしてなかなか調べるのにも苦労する。先日もWWW::MechanizeというWebサイトとのやりとりを自動化するPerlモジュールのテストをしようとインストールを試みたのだが、結果的にとんでもなく面倒なことになってしまった。


・CPAN(Comprehensive Perl Archive Network)とは?
Perlのライブラリやモジュールなどを集めた巨大なアーカイブ。簡単に言えばPerl開発者がモジュールを容易に入手できるようにしてくれるもの。


・PPM(Perl Package Manager)とは?
ActivePerlに付属するパッケージマネージャー。GUIで使いやすさを意図されているが、英語だったり必要なモジュールが見つからなかったりインストールに選択⇒実行の二段階の手順が必要でわかりにくかったりと、使い勝手は微妙だったりする。GUIを使わずコマンドラインからも実行できるので、こちらの方がわかりやすいかも。


早速導入したいところだが、まずは念のため、WWW::Mechanizeがインストール済みでないか確認する(モジュール関係は以前に導入したことを忘れがちなので)。コマンドプロンプトから以下を入力(「←」以降は解説なので入力の必要なし)。


C:\>ppm list -matching (モジュール名、今回はWWW-Mechanize)

結果は「no packages installed matching 'WWW-Mechanize'」ということで、やはりインストールされていないようだ。


というわけで、まずはCPANから導入を試みる。

C:\>perl -MCPAN -e shell ←プロンプトがCPANに変わる
cpan>install WWW::Mechanize

つらつらと一連の作業が実行され、キューを先頭に追加するかみたいなことを訊かれて、すべて「yes」と答えるものの、結局最後はエラー。ちなみにCPANからは「quit」で抜けられる。


続いてPMMで実行してみると、

C:\>ppm install WWW-Mechanize

結果は「ppm install failed: 401 Authorization Required」とのこと。


試しに「-Shell」をつけてみると、結果は「ppm install failed: Can't find any package that provide WWW-Mechanize-Shell」に変化した。


どちらもエラーだがメッセージが異なっているので調べてみると、「Can't find any package that provide...」の方は、どうやらActivePerlをインストールした時点でレポジトリ(モジュール群が置かれているインターネット上の場所)がActiveState社に設定されるらしく、このサーバ上に対象モジュールが置かれていないのが原因のようだ。
ならばレポジトリを追加してやれば良いと言うことで、winnipeg大学のURL(CPANのある場所)を追加してみる。

C:\>ppm rep add "winnipeg" "http://cpan.uwinnipeg.ca/PPMPackages/10xx/"
C:\>ppm rep ←レポジトリ一覧を確認
C:\>ppm search WWW-Mechanize ←WWW-Mechanizeがレポジトリにあるかチェック

「1: WWW-Mechanize」に続きバージョン情報などが表示されて存在するらしいことがわかったので再度のインストールを試みたところで、「ppm install failed: 401 Authorization Required」のエラーに戻る。


と、ここまで一連の作業でどうやらモジュールは存在するのだが、何らかの理由でインストールできないことがようやく判明する。どうやら「401 Authorization Required」のメッセージにヒントがありそうということで調べてみると、対象のモジュールは要するに現在のActivePerlのバージョンではライセンス期限切れということのようだ。
最新版のActivePerlにインストールし直せば解決するとのことで、現在のActivePerlのバージョンを調べてみると(方法はコマンドプロンプトから「perl -v」と入力)インストールされているものは5.8で、最新版は5.18。ただ。色々と追加したモジュールを忘れているので元の環境に戻せるのか不安。GDBMやらImage::SizeやらXMLRPCやら・・・。


↓ランキングにご協力ください↓
ブログランキング・にほんブログ村へ  ブログランキングならblogram