Mac : 10.15.1
Python 2.7.6
MariaDB : 10.4.10
mysqlclient を入れるのにいつくか関門があった。
まずは解決方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
brew install openssl export LDFLAGS="-L/usr/local/opt/openssl/lib" brew unlink mariadb brew install mariadb-connector-c ln -s /usr/local/opt/mariadb-connector-c/bin/mariadb_config /usr/local/bin/mysql_config # my_config.h があるパスを追加するよ。 環境が違うかもしれないのでわからない場合は下に詳細を書いておいたので参考にして下さい。 export CPPFLAGS="-I/usr/local/opt/openssl/include -I/usr/local/Cellar/mariadb/10.4.10/include/mysql/server" pip install mysqlclient rm /usr/local/bin/mysql_config brew unlink mariadb-connector-c brew link mariadb |
以下発生したエラーとそれぞれの対応
ssl のインストール
pip install mysqlclient
を普通に行うと
1 2 3 |
ld: library not found for -lssl', ' clang: error: linker command failed with exit code 1 (use -v to see invocation) |
はい、openssl を入れます。
1 2 3 |
% brew install openssl |
インストール時に
1 2 3 4 5 |
For compilers to find openssl you may need to set: export LDFLAGS="-L/usr/local/opt/openssl/lib" export CPPFLAGS="-I/usr/local/opt/openssl/include" |
と表示されるので、その通りに従い実行する
1 2 3 4 5 |
% export LDFLAGS="-L/usr/local/opt/openssl/lib" % export CPPFLAGS="-I/usr/local/opt/openssl/include" |
そして、
1 2 3 |
pip install mysqlclient |
エラー
1 2 3 4 |
"_mysql.c:2005:42: error: no member named 'reconnect' in 'struct st_mysql'" ' if ( reconnect != -1 ) self->connection.reconnect = reconnect;' |
mariadb-connector-c を入れる
エラーを調べると以下のようなのが見つかる。
手順を真似して実行する
1 2 3 4 5 6 7 8 |
brew unlink mariadb brew install mariadb-connector-c ln -s /usr/local/opt/mariadb-connector-c/bin/mariadb_config /usr/local/bin/mysql_config pip install mysqlclient |
だめじゃん。
以下のエラー
1 2 3 |
_mysql.c:44:10: fatal error: 'my_config.h' file not found", ' #include "my_config.h"', ' ^~~~~~~~~~~~~', ' 1 error generated.', " error: command 'cc' failed with exit status 1", ' |
mysql_config いじる
mysql_config 中をいじると良いとある情報が多々見つかる
https://stackoverflow.com/questions/50864438/mac-pip-install-mysql-python-unsuccessful
だけど、/usr/local/bin/mysql_config 正しく言えば、/usr/local/opt/mariadb-connector-c/bin/mariadb_config はバイナリ。
mariadb-connector-c じゃなくて、mariadb を利用していた時は、 mariadb_config はシェルファイルでいじれるけど。 なので、mariadb 時代の mariadb_config コピーしたりしたけど無駄でした。
include を追加して対応
結局 my_config.h の場所を探して
1 2 3 |
find /usr -name my_config.h -print 2>/dev/null |
1 2 3 |
export CPPFLAGS="-I/usr/local/opt/openssl/include -I/usr/local/Cellar/mariadb/10.4.10/include/mysql/server" |
をしたら成功しました。
仮想実行環境などで2回目以降のインストール
仮想実行環境(virtualenvや、pipenv)で、2回目以降は以下の手順でインストールできます。
mariadb-connector-c を、install するか unlink するかの違いしかないです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
brew unlink mariadb brew link mariadb-connector-c ln -s /usr/local/opt/mariadb-connector-c/bin/mariadb_config /usr/local/bin/mysql_config export LDFLAGS="-L/usr/local/opt/openssl/lib" # my_config.h があるパスを追加。詳細は上記参照 export CPPFLAGS="-I/usr/local/opt/openssl/include -I/usr/local/Cellar/mariadb/10.4.10/include/mysql/server" # インストール pipenv を使ってるのでpipenvでinstall pipenv install mysqlclient rm /usr/local/bin/mysql_config brew unlink mariadb-connector-c brew link mariadb |