読者です 読者をやめる 読者になる 読者になる

忘れないようにメモっとく

機械学習とかプログラミングとか。

もうシステムのpythonいじるのやめよう

python pip virtualenv easy_install

theanoというパッケージをインストールしたら、pythonのバージョンが原因でエラーになったので、新しくpythonをインストールした。
それで、システムのpythonシンボリックリンク貼ったりしてたら、前に作ってたプログラムが動かなくなった。
ということで、

  1. 新しいバージョンのpythonはローカルに作る(システムのpythonシンボリックリンクしない)
  2. プロジェクトごとにvirtualenv作る(easy_install要らない)

新しいバージョンのpythonはローカルに作る

ここを参考に。
python2.7をローカルにインストールする。

wget http://www.python.org/ftp/python/2.7.2/Python-2.7.2.tgz
tar xzf Python-2.7.2.tgz
cd python-2.7.2
./configure --enable-shared
make
make altinstall prefix=/home/hoge/usr/local exec-prefix=/home/hoge/usr/local

これで、hogeユーザーのホームディレクトリに新しくpythonを導入できた。

プロジェクトごとにvirtualenv作る

パッケージはpip使うのに、easy_installでpipをインストールする二度手間が要らないと思うので、直接virtualenvを作る。

参考

シェルスクリプトを書くと、

#!/bin/sh
# virtualenvのバージョン指定
VERSION=1.10.1

ENV=py-env0
ENV_OPTS='--no-site-packages --distribute'

# プロジェクトで使いたいpythonのバージョン指定。
PYTHON=/home/hoge/usr/local/bin/python2.7

URL_BASE=http://pypi.python.org/packages/source/v/virtualenv

curl -O $URL_BASE/virtualenv-$VERSION.tar.gz
tar xzf virtualenv-$VERSION.tar.gz

$PYTHON virtualenv-$VERSION/virtualenv.py $ENV_OPTS $ENV

rm -rf virtualenv-$VERSION
$ENV/bin/pip install virtualenv-$VERSION.tar.gz

python2.7で作ったvirtualenvなので、この環境下ではpython2.7で動作する。libpython.aを使いたかったら適宜ローカルにインストールすればよろし。

libpython2.7.soがないよー

で、pythonを実行してみると、

(py-env)$ python
python2.7: error while loading shared libraries: libpython2.7.so.1.0: cannot open shared object file: No such file or directory

え、ないの?

$ ls /home/hoge/usr/local/lib
libpython2.7.so  libpython2.7.so.1.0  pkgconfig  python2.7

libpython2.7.so、いた。ファイルは存在してる。

lddで確認すると

ldd /usr/local/bin/python2.7
     libpython2.7.so.1.0 => not found
     libpthread.so.0 => /lib64/libpthread.so.0 (0x0000003e2ca00000)
     libdl.so.2 => /lib64/libdl.so.2 (0x0000003e2c600000)
     libutil.so.1 => /lib64/libutil.so.1 (0x0000003e3a000000)
     libm.so.6 => /lib64/libm.so.6 (0x0000003e2c200000)
     libc.so.6 => /lib64/libc.so.6 (0x0000003e2be00000)
     /lib64/ld-linux-x86-64.so.2 (0x0000003e2ae00000)

やっぱりいないらしい。なんか/lib64/にシンボリックリンク貼ればいいのかな。

$ sudo ln home/hoge/usr/local/lib/libpython2.7.so.1.0 /lib64/libpython2.7.so.1.0

これでおっけー。