cpanm で WWW::Mechanize インストールの失敗を回避した方法
追記あり
その後、下記の回避方法を使わずに、WWW::Mechanize をインストールできた*1。
昨夜、perlbrew でインストールをした Perl 5.12.1 に CPAN モジュールを追加していたら、WWW::Mechanize の依存モジュールのインストールに失敗した。
エラーログが、~/cpanm/build.log にあるというので確認をしたら、エラーは次の内容だった。
% cpanm --force WWW::Mechanize --> Working on WWW::Mechanize Fetching http://search.cpan.org/CPAN/authors/id/P/PE/PETDANCE/WWW-Mechanize-1.66.tar.gz ... OK Configuring WWW-Mechanize-1.66 ... OK ==> Found dependencies: HTTP::Server::Simple, HTTP::Server::Simple::CGI --> Working on HTTP::Server::Simple Fetching http://search.cpan.org/CPAN/authors/id/J/JE/JESSE/HTTP-Server-Simple-0.43.tar.gz ... OK Configuring HTTP-Server-Simple-0.43 ... N/A ! Configure failed for HTTP-Server-Simple-0.43. See /Users/littlebuddha/.cpanm/build.log for details. ! Bailing out the installation for WWW-Mechanize-1.66. Retry with --prompt or --force.
ログには、
Cannot find version of an unblessed reference at inc/Module/Install/Base.pm line 118.
と記録されていた。
HTTP::Server::Simple の inc/Module/Install/Base.pm を読む
ファイルの物理的な行番号と、プログラム上の行番号が違うがところどころにコメントで行番号らしきものが書かれているので、推測で 118 行目がここだろうというところというソースを読んでみる。
(行頭の数字は Base.pm の物理的な行番号を表している)
vi /Users/littlebuddha/.cpanm/work/1289652465.2973/HTTP-Server-Simple-0.43/inc/Module/Install/Base.pm 43 #line 90 44 45 sub admin { 46 $_[0]->_top->{admin} 47 or 48 Module::Install::Base::FakeAdmin->new; 49 } 50 51 #line 106 52 53 sub is_admin { 54 $_[0]->admin->VERSION; 55 } 56 57 sub DESTROY {} 58 59 package Module::Install::Base::FakeAdmin; 60 61 my $fake; 62 63 sub new { 64 $fake ||= bless(\@_, $_[0]); 65 } 66 67 sub AUTOLOAD {}
この Base.pm ファイルの物理的な行数が 70 行ほどしかなく、118行目が存在しない。もしかしてと思い、コメントにある #line 106 が論理的な行数を割り当てられていると仮定して、118 行目を探してみる。
63 sub new { 64 $fake ||= bless(\@_, $_[0]); 65 }
このメソッドの引数のどちらかがリファレンスではない可能性があるが、この Base.pm のソースを読んでも何をしているのかがよくわからない。
ただ、手がかりとして、
59 package Module::Install::Base::FakeAdmin;
というソースと、このモジュールの説明に記載されている
This is a simple standalone HTTP server. By default, it doesn't thread or fork. It does, however, act as a simple frontend which can be used to build a standalone web-based application or turn a CGI into one.
http://search.cpan.org/~jesse/HTTP-Server-Simple-0.43/lib/HTTP/Server/Simple.pm#DESCRIPTION
を読んで、管理者権限でインストールする必要があるように思えた。
HTTP::Server::Simple を管理者権限でインストールする
そこで試しに、管理者権限で HTTP::Server::Simple をインストールしてみる。
% sudo cpanm HTTP::Server::Simple--> Working on HTTP::Server::Simple Fetching http://search.cpan.org/CPAN/authors/id/J/JE/JESSE/HTTP-Server-Simple-0.43.tar.gz ... OK Configuring HTTP-Server-Simple-0.43 ... OK Building and testing HTTP-Server-Simple-0.43 ... OK Successfully installed HTTP-Server-Simple-0.43
あっさりとインストールできてしまった。
WWW::Mechanize をインストールしてみる
そして、WWW::Mechanize のインストールをもう一度やってみる。
% cpanm WWW::Mechanize --> Working on WWW::Mechanize Fetching http://search.cpan.org/CPAN/authors/id/P/PE/PETDANCE/WWW-Mechanize-1.66.tar.gz ... OK Configuring WWW-Mechanize-1.66 ... OK Building and testing WWW-Mechanize-1.66 ... OK Successfully installed WWW-Mechanize-1.66
cpanm を使ううえで学んだこと
いくらユーザーのディレクトリに CPAN モジュールをインストールできるとは言っても、管理者権限でインストールする必要があるモジュールがあると言うことだ。
通常、CPAN モジュールをインストールするのは管理者権限なのだから、管理者がインストール作業をすることが前提にあるモジュールもあるということだ。
追記
管理者権限がなくても、普通にWWW::Mechanize をインストールできたので、管理者権限が必要になった場面では、何かの設定や作業が影響したため、管理者権限が必要になったのだと思われう。
*1:過去に設定した何かが影響をしているものと思われる