Ubuntu jauntyでpyluceneをビルドする
javaの検索エンジン「lucene」のpythonラッパーである「pylucene」をjauntyでインストールする。
debianのパッケージは古いのが大くて、FreeBSDのportsのようにコマンド一発で最新のソフトをインストールするのが困難なことが多い。結局、「tarball」からインストールしちゃうことになる。
環境・バージョン
ミソ
ソースをダウンロード
$ w3m
http://www.apache.org/dyn/closer.cgi/lucene/pylucene/
インストールの解説はここ
$ w3m
http://lucene.apache.org/pylucene/documentation/install.html
まずはjccなるものを構築
$ cd jcc
$ python setup.py build
$ sudo python setup.py install
「shared mode」の問題ででインストールできず
結論から言うとsetuptoolsをjccに含まれたパッチで更新しなければならない。 エラーメッセージには「NO_SHARED」という環境変数をセットし回避できるとあるが、 これをやると後程ランタイムエラーになる。なので、setuptoolsをパッチしなければならない。 pyluceneをインストールするのに必要なビルドツールのjccを入れるためにインストーラを パッチしなければいけないってのは納得いかないが、仕方ない。 (FreeBSD+perlのようにパッケージでモジュールインストール状態を完全に把握しながら 最新のソフトを使うのは無理なようだ。)setuptoolsをパッチ
$ sudo patch -d /usr/lib/python2.6/dist-packages -Nup0 < /home/takumi/src/pylucene-3.0.1-1/jcc/jcc/patches/patch.43.0.6c7
pylucene自体のビルド
makeの最初のコマンドがエラーを出している。コマンドのあるところが白紙なのでMakefile内の定義が抜けているようだ
$ cd .. # pylucene-3.0.1-1/に戻る
$ make
Makefileの Ubuntuセクションのコメントを外す。
# Linux (Ubuntu 8.10 64-bit, Python 2.5.2, OpenJDK 1.6, setuptools 0.6c9)
PREFIX_PYTHON=/usr
ANT=ant
PYTHON=$(PREFIX_PYTHON)/bin/python
JCC=$(PYTHON) -m jcc --shared
NUM_FILES=2
これでコマントはちゃんと生成されるが...
jccメインが見付からない?
再度、makeするが、pythonがjccのメインが見付からないと言ってコケる。エイラーメッセージは「eggにはメインがないから実行できない」とかいう内容だったと思う。
MakefileのJCCの定義に「__main__」を追加したらうまくいった。
# これを
JCC=$(PYTHON) -m jcc --shared
# こうするとうまくうごく
JCC=$(PYTHON) -m jcc.__main__ --shared
これでluceneモジュールがロードできるようになった
python
Python 2.6.2 (release26-maint, Apr 19 2009, 01:56:41)
[GCC 4.3.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import lucene
>>> lucene
<module 'lucene' from '/usr/local/lib/python2.6/dist-packages/lucene-3.0.1-py2.6-linux-i686.egg/lucene/__init__.pyc'>
まとめ