Python
Mac
MySQL
homebrew
macOSSierra

mysqlcliantをmacに入れようとしたらハマったのでメモ

問題

Macにmysqlcliantを入れようとしたら

$ pip install mysqlclient===1.7.3
~~中略~~
_mysql.c:29:10: fatal error: 'my_config.h' file not found

こんなものが出たので解決までのポエムをば

環境

スクリーンショット 2018-08-09 1.12.38.png
- macOS High Sierra 10.13.6
- python 3.5.1 (pyenvを用いて環境作り)
- mysql Ver 8.0.12 for osx10.13 on x86_64 (Homebrew)
- Homebrew 1.7.1
mysqlは--client-onlyでインストールしてあります。

解決までの道のり

軽くググったらmysqlcliantはmysql-connector-cをインストールすることを推奨してるらしいので以下を叩いた。

brew install mysql-connector-c

すると

Error: Cannot install mysql-connector-c because conflicting formulae are installed.
  mysql: because both install MySQL client libraries

Please `brew unlink mysql` before continuing.

Unlinking removes a formula's symlinks from /usr/local. You can
link the formula again after the install finishes. You can -- this
install, but the build may fail or cause obscure side-effects in the
resulting software.

というエラーが出たので
指示通りにunlinkして

brew unlink mysql

もういちどmysql connector-c をインストールすると


Collecting mysqlclient==1.3.7
  Using cached https://files.pythonhosted.org/packages/74/ff/4e964e20b559e55d7afa60fbccc6a560f2adf289813bd3d7eb4eb8a87093/mysqlclient-1.3.7.tar.gz
    Complete output from command python setup.py egg_info:
    Traceback (most recent call last):
      File "<string>", line 1, in <module>
      File "/private/var/folders/1k/615y_3dx5nl2nnnd8rwwnkjm0000gn/T/pip-install-he8dlqgt/mysqlclient/setup.py", line 17, in <module>
        metadata, options = get_config()
      File "/private/var/folders/1k/615y_3dx5nl2nnnd8rwwnkjm0000gn/T/pip-install-he8dlqgt/mysqlclient/setup_posix.py", line 54, in get_config
        libraries = [dequote(i[2:]) for i in libs if i.startswith('-l')]
      File "/private/var/folders/1k/615y_3dx5nl2nnnd8rwwnkjm0000gn/T/pip-install-he8dlqgt/mysqlclient/setup_posix.py", line 54, in <listcomp>
        libraries = [dequote(i[2:]) for i in libs if i.startswith('-l')]
      File "/private/var/folders/1k/615y_3dx5nl2nnnd8rwwnkjm0000gn/T/pip-install-he8dlqgt/mysqlclient/setup_posix.py", line 12, in dequote
        if s[0] in "\"'" and s[0] == s[-1]:
    IndexError: string index out of range

:thinking::thinking::thinking:

ここで先輩エンジニアの方から
macOS High Sierra + Python 3.6でmysqlclientをインストールする
を投げていただいたので、参照してmysqlをインストールしてみることに

$ brew install mysql
Warning: mysql 8.0.12 is already installed, it's just not linked
You can use `brew link mysql` to link this version.

オッ

$ brew link mysql

Linking /usr/local/Cellar/mysql/8.0.12... 
Error: Could not symlink bin/my_print_defaults
Target /usr/local/bin/my_print_defaults
is a symlink belonging to mysql-connector-c. You can unlink it:
  brew unlink mysql-connector-c

To force the link and overwrite all conflicting files:
  brew link --overwrite mysql

To list all files that would be deleted:
  brew link --overwrite --dry-run mysql
$ brew link --overwrite --dry-run mysql
Warning: Already linked: /usr/local/Cellar/mysql/8.0.12
To relink: brew unlink mysql && brew link mysql

また指示通りにリンクを貼り直す

$ brew unlink nysql && brew link mysql

そしたら最後にもう一度installしてやると、

$ pip install mysqlclient==1.3.7
Collecting mysqlclient==1.3.7
  Using cached https://files.pythonhosted.org/packages/74/ff/4e964e20b559e55d7afa60fbccc6a560f2adf289813bd3d7eb4eb8a87093/mysqlclient-1.3.7.tar.gz
Installing collected packages: mysqlclient
  Running setup.py install for mysqlclient ... done
Successfully installed mysqlclient-1.3.7

:thumbsup::ok_hand::v::kissing_heart:

反省,得た知見

Errorを流し見したせいでつまらないところでつまることがあった

英語アレルギー感じる前にErrorを読め

ググりが足りなかった

MacはLinuxよりもOSのVersionによるゴニョゴニョが多い気がするので、
OSのVersionも合わせてググると幸せになれる

Qiitaのかっこよくコードを埋め込むやつは

```
このチョンチョン三連星を書く前に一行開けなければならない(これはMarkdownの文法なんですかね)

原因?

  • mysqlをclient onlyでインストールしたから発生?
  • MacOSのVersion的な問題?