AmazonLinuxを使うようにしたら、Pythonが2.6.8だったので、2.7.5を/optに入れる

とりあえず、お仕事のEC2向けのAMIをAmazonLinuxで構築しようとしたところ、そういえばCentOSベースなのでPythonが古くてシステム的には2.6.8が入っていて、簡単に検索したかぎり、これを2.7とかに上書きするのは結構難しいようだ。つーわけで、/optに別に入れる形で2.7.5を使えるようにした。

とりあえず目標は、システムにデフォルトでインストールされているPythonはそのままにしておいて、/optにインストールしたPythonをアプリを起動したりするappユーザで/optに入れたPython2.7が使えるようにするところまで。

まずは、Pythonをコンパイルするところから。

とりあえず、C++のコンパイラいるみたいなので、入れる。(というか、デフォルトではgccとかも入ってなかったのでその辺も入ってないなら一通り入れる。)

$ sudo yum install gcc-c++

次は、configureする。g++が何故か認識されないので、CXXで指定するあたりがポイント?その他のオプションはお好みで。prefixは/opt/python27にした。

$ CXX=/usr/bin/g++ ./configure --prefix=/opt/python27 --with-threads --enable-shared LDFLAGS=-Wl,-rpath,/opt/python27 --disable-ipv6

んで、Pythonの各モジュールをコンパイルするために必要なライブラリたちを入れる。一部入らないものもあるけど、自分の必要なものだけ。make後にコンパイルしなかったよーリストがでるので、必要があればその名前をヒントにして必要なライブラリ入れる。

$ sudo yum install sqlite-devel db4-devel gdbm-devel

で、make

$ make -j4

んで、ldconfig周りを設定して、LD_LIBRARY_PATHとか指定しなくても、libpythonを見つけてくれるようにしておく。ld.so.conf.dにファイルつくるときには、よく見たら.confでファイル名が終わってないと読み込まれないので注意。いやー、なんで有効にならんの?ってちょっとハマった。

# cat > /etc/ld.so.conf.d/python27.conf
/opt/python27/lib
$ sudo ldconfig -v

こっからは、virtualenvwrapperが動くようにするところ。とりあえず、easy_installが欲しいので、ez_setup.pyから入れる。で、流れで次はpipを入れる。ここまで来れば、ほぼ終わり。

$ wget https://bitbucket.org/pypa/setuptools/raw/0.8/ez_setup.py -O - | sudo /opt/python27/bin/python2.7
$ sudo /opt/python27/bin/easy_install -U distribute pip

pipが入ったので、virtualenv関連を入れる。

$ sudo /opt/python27/bin/pip install virtualenv virtualenvwrapper

最後に、python2.7だけでなく、pythonでも使えるように、シンボリックリンク張る。

$ cd /opt/python27/bin
$ sudo ln -s python2.7 python

で、最後に、appユーザはこっちのPythonをデフォルトで使うように、.bashrcにいろいろ書いておく。

APP_HOME=/srv/kanda

PYTHON_HOME=/opt/python27
export PATH=$PYTHON_HOME/bin:$PATH

export VIRTUALENVWRAPPER_PYTHON=$PYTHON_HOME/bin/python2.7
export WORKON_HOME=$HOME/.virtualenvs
source $PYTHON_HOME/bin/virtualenvwrapper.sh

だいたいこんな感じ。これで、mkvirtualenvが使えるので、appユーザ向けにvirtualenvで自分のPython2.7の環境が作れるようになる。