orangain flavor

じっくりコトコト煮込んだみかん2。知らないことを知りたい。

CentOS5.2にPython2.6+Django1.1+mod_wsgi3.1をインストール

なんかそこら辺に幾らでも情報がある内容だけど、ちょっとずつ情報が違って調べるの面倒なので未来の自分のために書いておく。

はじめに

CentOS5.2にインストールされているPythonのバージョンは2.4.3で、古いからアップデートしたいと思ってもrpmが公開されておらず、yumではインストールできません。そこでソースからコンパイルしてインストールします。しゃーなしやで。
ちなみにPythonはマイナーバージョン(2.x.yの場合のx)が異なる場合にはちゃんと共存できるようになっていますので、システムで使われてる2.4は残しつつ2.6をインストールする方針で行きます。
具体的なシェルでの利用イメージとしては下記のようにしたいです。

$ python # 2.4が起動するが、ユーザごとの設定により2.6を起動させることもできる
$ python2.4 # 2.4が起動
$ python2.6 # 2.6が起動

インストール先

2.6はデフォルトのインストール先である/usr/localにインストールします。ちなみに2.4は/usrにインストールされています。

下準備

$ su
# yum install zlib-devel # easy_installに必要
# yum install sqlite-devel # SQLiteを使うのに必要
# 以下はあると嬉しいかも
# yum install ncurses-devel # pythonのシェルをリッチにするのに必要
# yum install readline-devel # 同上
# 以下は正直無視してもいいかも
# yum install gdbm-devel # GNU dbm を使うなら?
# yum install tkinter # Tk/Tclを使うなら?
# yum install tk-devel # 同上

Pythonインストール

2011年8月21日追記:x86_64の場合はconfigureするときに--enabled-sharedを付けないと、mod_wsgiのmakeで失敗する。*1

$ wget http://www.python.org/ftp/python/2.6.4/Python-2.6.4.tgz
$ tar zxvf Python-2.6.4.tgz
$ cd Python-2.6.4
$ ./configure # インストール先を変える場合には--prefix=/path/to/install
$ make # Failed to find the necessary bits to build these modulesというエラーが出てもいい
$ su
# make altinstall # /usr/local/bin/pythonを作らないinstall

正しくインストールできたか確認します。

$ python2.6
Python 2.6.4 (r264:75706, Dec 14 2009, 15:28:37) 
[GCC 4.1.2 20080704 (Red Hat 4.1.2-46)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 

既存の2.4を起動できることを確認します。

$ python
Python 2.4.3 (#1, Sep  3 2009, 15:37:12) 
[GCC 4.1.2 20080704 (Red Hat 4.1.2-46)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 

pythonとタイプしたときに2.6が起動するようにするときは、~/.bashrcに以下の記述を追加します。

alias python='python2.6'

ただしこの方法では、

/usr/bin/env python

としたときに、2.4が起動してしまうので、2.6を起動したい場合は、~/.bash_profileを次のように編集し、

PATH=$HOME/bin:$PATH       # PATH=$PATH:$HOME/bin

さらに

mkdir ~/bin
cd ~/bin
ln -s /usr/local/bin/python2.6 python

とします。

easy_installのインストール

$ wget http://peak.telecommunity.com/dist/ez_setup.py
$ su
# python2.6 ez_setup.py

Djangoのインストール

$ wget http://www.djangoproject.com/download/1.1.1/tarball/
$ tar xzvf Django-1.1.1.tar.gz
$ cd Django-1.1.1
$ su
# python2.6 setup.py install

MySQL-pythonのインストール

# yum install mysql-devel
# easy_install mysql-python

mod_wsgiのインストール

# yum install httpd-devel

$ wget http://modwsgi.googlecode.com/files/mod_wsgi-3.1.tar.gz
$ tar zxvf mod_wsgi-3.1.tar.gz
$ cd mod_wsgi-3.1.tar.gz
$ ./configure --with-python=/usr/local/bin/python2.6
$ make
$ su
# make install

/etc/httpd/conf/httpd.confに以下を追記

LoadModule wsgi_module modules/mod_wsgi.so
# service httpd restart

検証は適当だけど多分大丈夫だと思います。(まあ自分用だし)

*1:http://code.google.com/p/modwsgi/wiki/InstallationIssues#Mixing_32_Bit_And_64_Bit_Packages