Python2.6→2.7へアップデートするにあたってやったこと


> はてなにメモってた過去記事を再掲シリーズ（ちょっと古いかもしれない）

## インストールに必要なものをインストール

`$ sudo yum install zlib zlib-devel tk-devel tcl-devel sqlite-devel ncurses-devel gdbm-devel readline-devel bzip2-devel db4-devel openssl-devel`

## Pythonをダウンロードして解凍する

`$ wget http://python.org/ftp/python/2.7.2/Python-2.7.2.tgz`
`$ tar zxvf Python-2.7.2.tgz`

## インストール

`$ cd Python-2.7.2`
`$ ./configure --with-threads --enable-shared`

### エラー対策(x86_64の場合)ここで，実行すると

```
python: error while loading shared libraries: libpython2.7.so.1.0: cannot open shared object file: No such file or directory
```

とエラーで動かない．コンパイルはされているので，シンボリックを貼る.

`$ ln -s /usr/local/lib/libpython2.7.so.1.0 /lib64/`

## @CentOS

### Python2.7のinstall

http://wasure-memo.h-tsk.com/2012/03/centos-62-python-272.html
http://memo.yomukaku.net/entries/jbRkQkq

```
wget http://python.org/ftp/python/2.7.2/Python-2.7.2.tgztar zxvf Python-2.7.2.tgz
sudo yum install zlib zlib-devel tk-devel tcl-devel sqlite-devel ncurses-devel gdbm-devel readline-devel bzip2-devel db4-devel openssl-devel
cd Python-2.7.2
./configure --with-threads --enable-shared
make
sudo make install
python2.7
```

### pipのinstall

```
wget http://peak.telecommunity.com/dist/ez_setup.py
sudo /usr/local/bin/easy_install-2.7 pip

$ sudo /usr/local/bin/pip-2.7 install jubatus

$ sudo /usr/local/bin/pip-2.7 install MySQL-python
```
> エラー1：ここでmysql_configがないって怒られた

```
$ sudo yum install MySQL-devel.x86_64
$ which mysql_config
```

> エラー2：インストールできない

### 解決策

（無理矢理だけど）

```
$ sudo cp -rp /usr/lib64/python2.6/site-packages/_mysql* /usr/local/lib/python2.7/site-packages
$ sudo cp -rp /usr/lib64/python2.6/site-packages/MySQL* /usr/local/lib/python2.7/site-packages
```
一応できた…

ちなみにエラー2のエラーログは

```
$ sudo /usr/local/bin/pip install MySQL-python
Downloading/unpacking MySQL-python
  Running setup.py egg_info for package MySQL-python
   
Installing collected packages: MySQL-python
  Running setup.py install for MySQL-python
    building '_mysql' extension
    gcc -pthread -fno-strict-aliasing -g -O2 -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -fPIC -Dversion_info=(1,2,4,'final',1) -D__version__=1.2.4 -I/usr/include/mysql -I/usr/local/include/python2.7 -c _mysql.c -o build/temp.linux-x86_64-2.7/_mysql.o -g -pipe -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -fPIC -g -static-libgcc -fno-omit-frame-pointer -fno-strict-aliasing -DMY_PTHREAD_FASTMUTEX=1
    _mysql.c:44 から include されたファイル中:
    /usr/include/mysql/my_config.h:422:1: 警告: "HAVE_WCSCOLL" が再定義されました
    /usr/local/include/python2.7/Python.h:8 から include されたファイル中,
                     _mysql.c:29 から:
    /usr/local/include/python2.7/pyconfig.h:887:1: 警告: ここが以前の宣言がある位置です
    gcc -pthread -shared build/temp.linux-x86_64-2.7/_mysql.o -L/usr/lib64 -L/usr/local/lib -lmysqlclient_r -lpthread -lm -lrt -ldl -lpython2.7 -o build/lib.linux-x86_64-2.7/_mysql.so
    /usr/bin/ld: cannot find -lmysqlclient_r
    collect2: ld はステータス 1 で終了しました
    error: command 'gcc' failed with exit status 1
    Complete output from command /usr/local/bin/python2.7 -c "import setuptools;__file__='/tmp/pip-build-root/MySQL-python/setup.py';exec(compile(open(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --record /tmp/pip-Q9RYLv-record/install-record.txt --single-version-externally-managed:
    running install

running build

running build_py

copying _mysql_exceptions.py -> build/lib.linux-x86_64-2.7

copying MySQLdb/__init__.py -> build/lib.linux-x86_64-2.7/MySQLdb

copying MySQLdb/converters.py -> build/lib.linux-x86_64-2.7/MySQLdb

copying MySQLdb/connections.py -> build/lib.linux-x86_64-2.7/MySQLdb

copying MySQLdb/cursors.py -> build/lib.linux-x86_64-2.7/MySQLdb

copying MySQLdb/release.py -> build/lib.linux-x86_64-2.7/MySQLdb

copying MySQLdb/times.py -> build/lib.linux-x86_64-2.7/MySQLdb

copying MySQLdb/constants/__init__.py -> build/lib.linux-x86_64-2.7/MySQLdb/constants

copying MySQLdb/constants/CR.py -> build/lib.linux-x86_64-2.7/MySQLdb/constants

copying MySQLdb/constants/FIELD_TYPE.py -> build/lib.linux-x86_64-2.7/MySQLdb/constants

copying MySQLdb/constants/ER.py -> build/lib.linux-x86_64-2.7/MySQLdb/constants

copying MySQLdb/constants/FLAG.py -> build/lib.linux-x86_64-2.7/MySQLdb/constants

copying MySQLdb/constants/REFRESH.py -> build/lib.linux-x86_64-2.7/MySQLdb/constants

copying MySQLdb/constants/CLIENT.py -> build/lib.linux-x86_64-2.7/MySQLdb/constants

running build_ext

building '_mysql' extension

gcc -pthread -fno-strict-aliasing -g -O2 -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -fPIC -Dversion_info=(1,2,4,'final',1) -D__version__=1.2.4 -I/usr/include/mysql -I/usr/local/include/python2.7 -c _mysql.c -o build/temp.linux-x86_64-2.7/_mysql.o -g -pipe -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -fPIC -g -static-libgcc -fno-omit-frame-pointer -fno-strict-aliasing -DMY_PTHREAD_FASTMUTEX=1

_mysql.c:44 から include されたファイル中:

/usr/include/mysql/my_config.h:422:1: 警告: "HAVE_WCSCOLL" が再定義されました

/usr/local/include/python2.7/Python.h:8 から include されたファイル中,

                 _mysql.c:29 から:

/usr/local/include/python2.7/pyconfig.h:887:1: 警告: ここが以前の宣言がある位置です

gcc -pthread -shared build/temp.linux-x86_64-2.7/_mysql.o -L/usr/lib64 -L/usr/local/lib -lmysqlclient_r -lpthread -lm -lrt -ldl -lpython2.7 -o build/lib.linux-x86_64-2.7/_mysql.so

/usr/bin/ld: cannot find -lmysqlclient_r

collect2: ld はステータス 1 で終了しました

error: command 'gcc' failed with exit status 1

----------------------------------------
Command /usr/local/bin/python2.7 -c "import setuptools;__file__='/tmp/pip-build-root/MySQL-python/setup.py';exec(compile(open(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --record /tmp/pip-Q9RYLv-record/install-record.txt --single-version-externally-managed failed with error code 1 in /tmp/pip-build-root/MySQL-python
```