レンタルサーバで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がすんなりいきませんでした。
1 2 3 4 | $ 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がない!」と怒られます。
1 2 3 4 5 6 7 8 9 10 | $ 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のインストールが面倒だっただけですが…
1 2 | $ find . -name Python.h -print $. /pkg_bakup/Python-2 .7.6 /Include/Python .h |
上記のIncludeディレクトリは以下にあったヘッダファイル類を全部
1 | $PYTHONPATH/include/python2.7 |
にコピーしてやります。
5.ビルドしてみる(再チャレンジ)
再び、setup build。
1 | $ python setup.py build |
すると今度は、「pyconfig.hがない」と怒られます。
1 | ($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ディレクトリ配下にコピーします。
1 2 3 4 5 6 | $ 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.ビルドしてみる(再々チャレンジ)
1 | $ python setup.py build |
今度は成功!
7.インストール
最後にインストール。
1 | python setup.py install |
以上で完了です。