レンタルサーバでMySQLdbを使おうとしたら、どうもモジュールのビルドが必要らしい。
試行錯誤しながらやってみました。
私の環境は、レンタルサーバ(VALUESERVER)。
もともとVALUESERVERではPython 2.6が提供されているのですが、2.7を使用したかったため自分のホームディレクトリにpython 2.7環境を作って利用しています。
仮想環境の場合だと、手順どおりにいかない場合もあるので備忘録を作成しておきます。
1.環境
環境は以下のとおり。
・Python: Python 2.7.6 (仮想環境)
・Linux: CentOS release 6.5
2.ダウンロード
まずは、以下のサイトから現時点(2014.5.4)で最新のMySQL-python-1.2.4b4.tar.gzをダウンロード。
https://pypi.python.org/pypi/MySQL-python/1.2.4b4
3.インストール
通常は以下のインストール手順でうまくいくはずだが、今回はbuildがすんなりいきませんでした。
$ tar xfz MySQL-python-1.2.4b4.tar.gz $ cd MySQL-python-1.2.4b4 $ python setup.py build $ python setup.py install
以降はbuild方法について書いておきます。
4.ビルドしてみる
ビルドすると、「Python.hがない!」と怒られます。
$ python setup.py build running build running build_py copying MySQLdb/release.py -> build/lib.linux-x86_64-2.7/MySQLdb 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,'beta',4) -D__version__=1.2.4b4 -I/usr/include/mysql -I(ここにPYTHONPATHがは設定される)/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 -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -fno-strict-aliasing -fwrapv -fPIC -fPIC -g -static-libgcc -fno-omit-frame-pointer -fno-strict-aliasing -DMY_PTHREAD_FASTMUTEX=1 _mysql.c:29:20: error: Python.h: No such file or directory _mysql.c:40:26: error: structmember.h: No such file or directory <<以下省略>>
ネットでいろいろ調べていると、いつもお世話になっているstackoverflowに同じ事象の質問がありました。
「Using PIP in a virtual environment, how do I install MySQL-python」
http://stackoverflow.com/questions/3960305/using-pip-in-a-virtual-environment-how-do-i-install-mysql-python
この質問はPIPコマンドでインストールした場合についてですが、根本的にはビルドのところでエラーになっている点では同じです。
それで、回答としては
「python-devをインストールしろ」
とかいてあります。
python-devには、Python モジュールの構築に必要なヘッダファイル、静的ライブラリなどが含まれていますので、これをインストールしてね、ということです。
私の場合は、先日Python 2.7.6をビルドしたときのパッケージが残ってた(?)のでそちらのヘッダファイルを使うことにしました。
#単にpython-devのインストールが面倒だっただけですが…
$find . -name Python.h -print $./pkg_bakup/Python-2.7.6/Include/Python.h
上記のIncludeディレクトリは以下にあったヘッダファイル類を全部
$PYTHONPATH/include/python2.7
にコピーしてやります。
5.ビルドしてみる(再チャレンジ)
再び、setup build。
$ python setup.py build
すると今度は、「pyconfig.hがない」と怒られます。
($PYTHONPATHが設定される)/include/python2.7/Python.h:8:22: error: pyconfig.h: No such file or directory
そこでまた、Python 2.7.6をビルドしたときの環境からpyconfig.hをもってきます。
findすると4つヒット。
2行目のファイルを例によってincludeディレクトリ配下にコピーします。
$ find . -name pyconfig.h -print ./pkg_bakup/Python-2.7.6/pyconfig.h ★コレ ./pkg_bakup/Python-2.7.6/PC/os2vacpp/pyconfig.h ./pkg_bakup/Python-2.7.6/PC/pyconfig.h ./pkg_bakup/Python-2.7.6/PC/os2emx/pyconfig.h ./pkg_bakup/Python-2.7.6/RISCOS/pyconfig.h
6.ビルドしてみる(再々チャレンジ)
$ python setup.py build
今度は成功!
7.インストール
最後にインストール。
python setup.py install
以上で完了です。