Ubuntu jauntyでpyluceneをビルドする

java検索エンジンlucene」のpythonラッパーである「pylucene」をjauntyでインストールする。

debianのパッケージは古いのが大くて、FreeBSDportsのようにコマンド一発で最新のソフトをインストールするのが困難なことが多い。結局、「tarball」からインストールしちゃうことになる。

環境・バージョン

ミソ

  • jccをビルドする際にsetuptoolsをパッチしろと言われたら素直に従う



  • pythonがjccのコマンドメインを見付けられなかったらJCCの定義に「.__main__」を追加する


ソースをダウンロード
$ 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自体のビルド


$ cd .. # pylucene-3.0.1-1/に戻る
$ make
makeの最初のコマンドがエラーを出している。コマンドのあるところが白紙なのでMakefile内の定義が抜けているようだ

MakefileUbuntuセクションのコメントを外す。


# 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'>

まとめ


  • jccをビルドする際にsetuptoolsをパッチしろと言われたら素直に従う

  • pythonがjccのコマンドメインを見付けられなかったらJCCの定義に「.__main__」を追加する。