複数の 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 を書いたけど面白い!