blog20100901

2013/08/20 - プログラミング言語 Perl にまつわる etc. - Perl monger
参考 : perldoc, perldoc.jp, search.cpan.org, perldoc.perl.org ...
「 初めての Perl 第 6 版 」(オライリー・ジャパン発行 ISBN978-4-87311-567-2) 」
「 続・初めての Perl 改訂版 」(オライリー・ジャパン発行 ISBN4-87311-305-9) 」
「 Effective Perl 第 2 版 」(翔泳社発行 ISBN978-4-7981-3981-4) 」 ... etc,.

Perl Perl_1

Perl 「 モジュール 」CPAN の ? アンインストール/再インストール (0x97)

Perl 「 モジュール 」CPAN の ? アンインストール/再インストール (0x97)

目次 - Perl Index



Perl について、復習を兼ねて断片的な情報を掲載して行く連載その 0x97 回。

コマンド cpan を使ってインストール/アップグレードした .cpan/ およびモジュール群を削除する。




現状確認



前回の「 Perl 「 モジュール 」インストール/アップグレード (0x96) 」では、CPAN モジュールのインストールとアップデートを行いました。

モジュールのインストール先は「 Perl 「 モジュール 」cpan 利用前の準備 その 3 (0x93) 」で、一般のユーザが書き込み権限を持つホームディレクトリ ( $HOME ) 配下に指定しています。

モジュール local::lib の活躍によって root ( または sudo ) 権限がなくとも、泣くことはなくなった訳です。

現時点では既に、CPAN ( Comprehensive Perl Archive Network ) で配布される様々なモジュールを自由にインストールして自由に利用出来る状態になっています。


$HOME 配下のモジュール群を確認する



それでは、現在インストールされているモジュール群を改めて確認してみましょう。

インストールされたモジュール群の確認方法は「 Perl 「 モジュール 」(0x8e) 」で紹介したコマンド find と perl を組み合わせたものを使います。

つまり、次のコマンドです。


$ find `perl -e 'print "@INC"'` -name '*.pm' -print


ここで、大きな問題がありました。

@INC には、僕が利用しているレンタルサーバ Drive Network のシステムディレクトリと、僕が任意に指定した $HOME 配下のディレクトリが設定されています。

僕は、$HOME 配下のディレクトリで CPAN の利用環境をがっつり構築しているので、少なくないモジュールが、標準のシステムディレクトリのモジュールと重複してしまっているのです。

こうした環境で、上記コマンドを実行したところ次の様に中々膨大なリストになりました。


$ find `perl -e 'print "@INC"'` -name '*.pm' -print | wc -l
13712


パイプ ( | ) でつないだコマンド wc -l は、リストの行数を表示しますので、「 13712 」のモジュールがあるかの様に見えます。

いくらなんでも大杉じゃないか。。

ということで、$HOME 配下のモジュールだけをリストする様コマンドを修正しました。


$ find `perl -e 'for (@INC) {print "$_\n" if $_ =~ /homedirectory/}'` -name '*.pm' -print | wc -l
2466


「 2466 」です。大幅に減りました。

が、大幅に減った要因は、実のところ @INC に含まれる「 . 」( カレントディレクトリを表す) にあったりします。

その証拠に「 . 」を除いて、システムディレクトリと $HOME 配下のみを検索する次のパターンでは、「 4962 」となります。


find `perl -e 'for (@INC) {print "$_\n" if $_ ne q/./}'` -name '*.pm' -print | wc -l
4962


$HOME 配下 ( homedirectory/ ) だけの場合が「 2466 」だったのでほぼ倍、つまり、システムディレクトリとの重複分プラスアルファで「 4962 」になる訳です。

となると、元の行数「 13712 」というのはいったい何なんでしょうか。残りの「 8750 」の内容が気になりますが、おそらくそれはコマンド find の振る舞いに関わってくるはずなので今は横に置いておきます。

なにはともあれ、現在 $HOME 配下には約 2500 のモジュールがインストールされている様子です。


アンインストール ?



これまで確認してきた通り、自分の権限の及ぶ任意のディレクトリで CPAN を利用するにあたって、いくつかの作業を行っています。

最初は本当に手探り ( 今でもまあ手探りですが ) で、果たしてこれで良いのかどうか不安でいっぱいでした。

目的はモジュールの利用なので、モジュールが使えれば良い、という考えもありますが、僕は、不安に包まれながらいびつな形でモジュールを利用するのが嫌だなと思ったわけです。

そんな状態で利用していたら、少しのトラブルで脳内がフリーズするでしょうし、きっと余計な手間が増えてしまいます。そして何より気持ちが悪い。

そこで僕は、初回の設定をやり直す、つまり、再インストールをしながら手順を確認することにしたのです。

しかしながら、再インストールに必要なのは、アンインストールです。

僕が Drive Netwrok で利用している Free BSD には、手元の Windows の様なコントロールパネル with GUI の様なものは存在しないので、どうしたものかと迷う訳です。素人ですから。

Unix 系のシステムに慣れてくると、あぁ、構成ファイルを削除してやれば良いのだなということが分かってきますが、まあ不安ですよね。

CPAN 利用に関しての構成ファイルは $HOME 配下の .cpan/ と perl5/ に収まっていることくらいは分かっていましたが、果たして本当にそうなのかは分かりません。

今の僕にはどう考えたって分かりませんが、僕にとってこれはやってみなければ分からない類の問題なので、僕はこれを削除することにしました。


アンインストール ? その 2



つまり、発想としてはインストール時に行った作業の逆をやれば良いだろうということです。

そういうことで、まずは、コマンド rm を使って $HOME/.cpan/ と $HOME/perl5/ を削除しました。


$ rm -rf .cpan/ perl5/


それから $HOME にあるシェルの設定ファイル .cshrc に追加した設定をコメントアウトします。


# eval `perl -I$HOME/perl5/lib/perl5/ -Mlocal::lib`


これで、インストールしたモジュールや、cpan シェルの設定を一掃してやったことになるはずです。

ですからこの状態で、コマンド cpan や perl -MCPAN -e shell をタイプすると、また初めから設定が開始されます。

初めからの設定が出来るということは、おそらく僕の希望は達成されている訳です。

もちろん、root ( sudo ) 権限を持たない僕らは、cpan の再設定の前に local::lib の再インストールを行うことが重要です。それからシェルにパスを設定します。

0x97 -> 0x98 へ



おそらく、長らく CPAN を利用しているなら、こんなに簡単に削除してはいけないはずですが、今の僕の様な状況ならば、まるっと削除してしまっても問題ありません。

なぜなら、これまで使っていないからです。

しばらく利用を続けた上で、いくつかのモジュールを削除したくなった場合はどうすれば良いのでしょうか。

該当モジュールの構成ファイルをピンポイントで削除するのは敷居が高そうです。

実際の方法はいくつかある様ですが、僕は、CPAN にて「 App::pmuninstall 」なるモジュールを発見しました。

App::pmuninstall - Uninstall modules


ということです。モジュールをうまいことアンインストールしてくれるのです。

また、このモジュールは「 App::cpanminus 」と親和性が高いと言います。

App::cpanminus and, App::cpanoutdated with a high affinity.


「 App::cpanminus 」は、僕が「 cpanm 」と呼んでいるものです。ふふふ。

参考情報は書籍「 初めての Perl 第 6 版 」を中心に perldoc, Wikipedia および各 Web サイト。それと詳しい先輩。

目次 - Perl Index

















同じカテゴリー(Perl)の記事
 Perl mp2 翻訳 Web コンテンツ圧縮の FAQ (d228) (2023-10-11 23:49)
 Perl mp2 翻訳 既知のブラウザのバグの回避策をいくつか (d227) (2023-05-26 15:41)
 Perl mp2 翻訳 Perl と Apache でのキュートなトリック (d226) (2023-05-19 17:05)
 Perl mp2 翻訳 テンプレートシステムの選択 (d225) (2022-08-15 22:23)
 Perl mp2 翻訳 大規模 E コマースサイトの構築 (d224) (2022-06-15 20:43)
 Perl mp2 翻訳 チュートリアル (d223) (2022-06-15 20:42)
上の画像に書かれている文字を入力して下さい
 
<ご注意>
書き込まれた内容は公開され、ブログの持ち主だけが削除できます。

Llama
リャマ
TI-DA
てぃーだブログ
プロフィール
セラ (perlackline)
セラ (perlackline)
QRコード
QRCODE
オーナーへメッセージ

PAGE TOP ▲