複数の PEAR パッケージのインストールを簡単に行う

PEAR は本家 PEAR リポジトリの他に野良 PEAR があったりするので、新しい PHP の環境を作る際に一からいちいち入れないと行けないのが面倒。
特に自分は PHP のバージョンごとにディレクトリを切って入れているので、新しいバージョンをインストールするたびに、毎回使用しているライブラリを入れるのが面倒だった。
# ローカルの PEAR 環境を作るにしても毎回設定しないといけいないのでめんどくさい


Python には pip というものがあるそうな。
こういうのをやりたいと思ってたのでやってみた。
Paver というツールがあるそうなので、それを使ってみた。


Paver を easy_install した後に、インストールしたい PEAR のパッケージの一覧を作る。

$ vim pear.txt
channel-discover openpear.org
openpear/Db_Fixture-beta
openpear/Net_URL_Dispatcher-beta

channel-discover って書いてあると野良 PEARリポジトリを読み込む。
この場合は openpear のチャンネルを使用できるようになる。


2 行目以下がパッケージ名となる。
# pear install の後ろに続くやつ
pear コマンドがこの行を実行するので、普通にオプションを付けられる。依存パッケージも入れたかったら、

openpear/Db_Fixture-beta -a

みたいに書く。


Paver が読み込む pavement.py はこんな感じ。

#!/usr/bin/env python
# -*- coding: utf_8 -*-
from paver.easy import *

def execute(text):
    if text.find('channel-discover') == -1:
        print 'install pear package...'
        sh('sudo pear install ' + text)
    else:
        sh('sudo pear ' + text)
    return

@task
@cmdopts([('list=', 'l', 'Path to pear package list file.')])
def pear(options):
    try:
        file = options['list']
    except KeyError:
        file = './pear.txt'

    file = path(file)
    if file.isfile():
        for line in file.lines():
            try:
                execute(line.rstrip())
            except:
                pass

至ってシンプルw


使い方は pavement.py のあるディレクトリに pear.txt を設置して、

$ paver pear

とするか、もしくは -l オプションを付けて読み込むファイルを設定する。
# -l オプションを付けなかったら、 pavement.py と同階層にある pear.txt を読みに行く

$ paver -f /path/to/pavement.py pear -l /path/to/pear.txt

実行すると、 sudo でパスワードを聞いてくるので入力すると pear パッケージがインストールされる。

$ paver -f /path/to/pavement.py pear -l /path/to/pear.txt
---> pavement.pear
sudo pear channel-discover openpear.org
Password:
Adding Channel "openpear.org" succeeded
Discovery of channel "openpear.org" succeeded
install pear package...
sudo pear install openpear/Db_Fixture-beta
downloading Db_Fixture-0.1.3.tgz ...
Starting to download Db_Fixture-0.1.3.tgz (5,297 bytes)
.....done: 5,297 bytes
install ok: channel://openpear.org/Db_Fixture-0.1.3
install pear package...
sudo pear install openpear/Net_URL_Dispatcher-beta
downloading Net_URL_Dispatcher-0.1.1.tgz ...
Starting to download Net_URL_Dispatcher-0.1.1.tgz (5,523 bytes)
.....done: 5,523 bytes
install ok: channel://openpear.org/Net_URL_Dispatcher-0.1.1

Paver はコマンドラインのオプションを解釈できたり、コマンドを渡して実行したり、パスをよろしくしてくれるので凄く便利。


初めて Python を書いたけど面白い!