CentOS5にpython2.6+Django+mod_python+色々の環境を整える

YahooのOpenIDを試そうとしたら、なんかポート番号がほげほげでどうこうらしいことを知ったので、mod_pythonを入れてちゃんと動かせば使えるのかなー、と思ってCentOSを入れてみたメモ。
MacBookApacheの設定をしてもよかったんだけど、手元のMacBookにはデフォルトで入ってるApacheとportで入れたApacheの二つが入っててよくわからないから、CentOSを入れた。
CentOSはほぼ最小構成*1で入れる
python2.6+mod_python+Djangoでまとめようとしたけど、ついでなのでよく使うライブラリの入れ方もまとめてみる。

pythonのインストール

CentOS5にデフォルトで入ってくるpythonは2.4と多少古いため、python2.6をソースから入れる。

手順は以下の通り

$ wget http://python.org/ftp/python/2.6/Python-2.6.tgz
$ tar xvzf Python-2.6.tgz
$ cd Python-2.6
$ ./configure --enable-shared
$ sudo yum install -y zlib-devel  #zlibをincludeするために必要
$ vim Modules/Setup
#zlib zlibmodule.c -I$(prefix)/include -L$(exec_prefix)/lib -lz
↓  コメントを外す
zlib zlibmodule.c -I$(prefix)/include -L$(exec_prefix)/lib -lz
$ make
$ sudo make install
$ python
$ sudo cp libpython2.6.so libpython2.6.so.1.0 /usr/lib/

これでインストール完了。zlibをincludeするのは、後にeasy_installを入れるときに必要になる。またzlibをincludeするためにはzlib-develが必要。これでかなり詰まった
Python2.5であればこの手順は不要(のはず)

各種ライブラリのインストール

普段よく使うものをとりあえず入れる

easy_install

とりあえずeasy_installができないとお話にならないので入れる

$ wget http://peak.telecommunity.com/dist/ez_setup.py
$ sudo python ez_setup.py
feedparesr

RSSとかAtomをパースするもの。超簡単

$ sudo easy_install feedparser
MySQLdb

DBはMySQLを使う場合これが必須。SQLiteやPostgreSQLを使う場合は似たようなのが必要。
mysql-develが無いとエラーが出るので先にyumでいれる。
あとeasy_installする場合にちょっと名前が違うから注意が必要

$ sudo yum -y install mysql-devel
$ sudo easy_install MySQL-python
SQLAlchemy

たぶん一番注目を集めてるO/Rマッパー。Django使うならDjangoのO/Rマッパーで十分なんだけど、クローラーとか書くときにDjangoのライブラリを使う方法がよくわからないからSQLAlchemyを使うことが多い

$ sudo easy_install SQLAlchemy
lxml

XMLとかHTMLをパースするのに便利。XPathでもDOMでも取れる。Cで書かれてるからBeatutifulSoupより高速。たぶん他にも色々できる。
インストールするには、libxml2-develとlibxslt-develが必要。もしかしたらlibxslt-develだけでも大丈夫かも。

$ sudo yum -y install libxslt-devel
$ sudo easy_install lxml
mercurial

バージョン管理システム。python製なのでeasy_installで入れる
Subversinoと違ってお気軽な分散バージョン管理システム。python好きならGitよりこっちですよね!

$ sudo easy_install mercurial
OpenID関連

よくわからないけど、それっぽいの入れてみた

$ sudo easy_install python-openid
$ sudo easy_install python-yadis
Django

昔はeasy_installで入れられた気がする*2けど、なぜか入らなかったのでソースを落としてくる

$ wget http://www.djangoproject.com/download/1.0/tarball/
$ tar xvzf Django-1.0.tar.gz
$ cd Django-1.0
$ sudo python setup.py install

mod_python

$ sudo yum -y install httpd-devel

mod_pythonのインストールにapxsを使うので、それを入れる

$ wget http://ftp.riken.jp/net/apache/httpd/modpython/mod_python-3.3.1.tgz
$ tar xvzf mod_python-3.3.1.tgz
$ cd mod_python
$ ./configure --with-python=/usr/local/bin/python2.6 --with-apxs=/usr/sbin/apxs 
$ make
$ sudo make install

with-pythonとwith-apxsはそれぞれPathを指定する。CentOSにこれまでの手順でインストールしてきたなら、このディレクトリにあるはず

Django + mod_python

以下は/var/www/html以下にDjangoプロジェクトを作成して、mod_pythonでDjangoを動かすまでの手順です

$ sudo chown tohae. /var/www/html # DocumentRootにユーザーtohaeで書き込める用にする。めんどくさいし
$ cd /var/www/html
$ django-admin.py startproject tohae
$ cd tohae
$ django-admin.py startapp test
$ cp ~/tohae.py /var/www/html/tohae/  # tohae.pyは過去のエントリを参照 http://d.hatena.ne.jp/tohae/20080530/1212101824
$ python tohae.py
$ vim urls.py
(r'^test/',include('tohae.test.urls')),
↓ 
(r'^tohae/test/',include('tohae.test.urls')),
# mod_pythoでは厳密なURL構成にしなくてはならない。
# DocumentRoot以下にtohaeディレクトリを作ったのでtohae/で始まるようにする

$ sudo vim /etc/httpd/conf.d/python.conf  # mod_python用のconfファイルを新しく作成
LoadModule python_module modules/mod_python.so
<Location "/tohae/">
    SetHandler python-program
    PythonPath "['/var/www/html/']+sys.path"
    PythonHandler django.core.handlers.modpython
    SetEnv PYTHON_EGG_CACHE /var/www/html/tohae/.python-eggs 
    SetEnv DJANGO_SETTINGS_MODULE tohae.settings
    PythonDebug On
</Location>

$ sudo /sbin/service httpd restart 

これで設定完了。あとはhttp://hostname/tohae/にアクセスして、HelloWorldが表示されれば、mod_pythonでDjangoが動いています
Django+OpenIDで詰まってるところまで書こうと思ったけど、長くなったしめんどくさくなったのでやめ。
次回以降に持ち越します

*1:「開発ツール」と「ベース」のみチェック

*2:古かったけど