mysqlclient / MySQL-python コンパイルエラー対処
Redhat w/SCL + pip で、Django/python の MySQLドライバ mysqlclient / MySQL-python がインストール出来なかった対処メモ。
SCLの問題というか、Redhatのrpmパッケージの考え方の問題なのかな?
# MySQL の mysqlclient と python と名前が被って若干混乱
状況と解決
pip でインストールをすると gcc が走ってコンパイルを行うのですが、どちらのドライバも同じ所で失敗してしまってました。
gcc -pthread -shared build/temp.linux-x86_64-2.7/_mysql.o -L/opt/rh/mysql55/root/usr/lib64/mysql -L/opt/rh/python27/root/usr /lib64 -lmysqlclient -lpthread -lz -lm -lrt -lssl -lcrypto -ldl -lpython2.7 -o build/lib.linux-x86_64-2.7/_mysql.so /usr/bin/ld: cannot find -lmysqlclient
mysqlclient でググルと、MySQL-develと一緒に提供があるとの情報と、libmysqlclient.so によるとある。
SCL頼らないところにもしかして?と思ったら /usr/lib64/mysql 配下に、ファイル libmysqlclient.so.16.0.0 があった。もしかして使えるのかなぁと、lnかけてから、ldconfig で共有ライブラリ参照キャッシュを更新。
$ sudo ln -s /usr/lib64/mysql/libmysqlclient.so.16.0.0 /usr/lib64/mysql/libmysqlclient.so $ sudo ldconfig $ ldconfig -p | grep libmysqlclient.so$ libmysqlclient.so (libc6,x86-64) => /usr/lib64/mysql/libmysqlclient.so
無事、これでコンパイルが通りました!
# これを機に、 MySQL-python から mysqlclient へも乗り換え。Django settings.py の変更はなくても使えました
参照
その他
z lib も不足してるとエラーが出てたのですが、こちらはパッケージインストールで解決。
# " cannot find -lz " は、何を指してるのか最初わからず
$ sudo yum install zlib-devel
/etc/ld.so.conf , /etc/ld.so.conf.d/ とあちこちを理解した一日でした。リリース中に遭遇っていうのが一番きつかったところ。。。
ログ
$ pip install MySQL-python Downloading/unpacking MySQL-python Downloading MySQL-python-1.2.5.zip (108kB): 108kB downloaded Running setup.py egg_info for package MySQL-python Installing collected packages: MySQL-python Running setup.py install for MySQL-python ... gcc -pthread -shared build/temp.linux-x86_64-2.7/_mysql.o -L/opt/rh/mysql55/root/usr/lib64/mysql -L/opt/rh/python27/root/usr /lib64 -lmysqlclient -lpthread -lz -lm -lrt -lssl -lcrypto -ldl -lpython2.7 -o build/lib.linux-x86_64-2.7/_mysql.so /usr/bin/ld: cannot find -lmysqlclient collect2: ld はステータス 1 で終了しました error: command 'gcc' failed with exit status 1 ... UnicodeDecodeError: 'ascii' codec can't decode byte 0xe3 in position 58: ordinal not in range(128)