web-dev-qa-db-ja.com

PythonのMySQLdbは、Homebrewed MySQLでlibmysqlclient.dylibを見つけることができません

MySQLおよびPython Homebrewとともにインストールされます

MySQLをインストールし、Python Homebrew with OS X 10.10.5 Yosemiteをインストールしました。MyPython 2.7はpython -> ../Cellar/python/2.7.9/bin/pythonにあり、シンボリックリンクが/usr/local/bin/pythonにあります。

/usr/local/binにはシンボリックリンクがあります:
mysql -> ../Cellar/mysql/5.7.9/bin/mysql

エラー

Pythonシェルで:

>>> import MySQLdb
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python2.7/site-packages/MySQLdb/__init__.py", line 19, in <module>
    import _mysql
ImportError: dlopen(/usr/local/lib/python2.7/site-packages/_mysql.so, 2): Library not loaded: /usr/local/lib/libmysqlclient.18.dylib
  Referenced from: /usr/local/lib/python2.7/site-packages/_mysql.so
  Reason: image not found

だから私は試しました:
$ Sudo unlink /usr/local/lib/libmysqlclient.18.dylib

に続く:
DYLD_LIBRARY_PATH=/usr/local/mysql/lib/:$DYLD_LIBRARY_PATH

そして(理由による必死):
$ export DYLD_LIBRARY_PATH=/usr/local/Cellar/mysql/5.7.9/lib

ただし、どちらの場合もimport MySQLdblibmysqlclient.18.dylibをインポートしようとしました。

それから私は試しました:
$ pip install -U MySQL-pythonおよび得た:Requirement already up-to-date: MySQL-python in /usr/local/lib/python2.7/site-packages

既存の回答

多くの answersto thisproblemon SO は、バージョン番号(私のケースlibmysqlclient.20.dylib)。ただし、既存のシンボリックリンクを考えると、これは大まかなものであり、将来を保証するものではありません。

/usr/local/libには
libmysqlclient.dylib -> ../Cellar/mysql/5.7.9/lib/libmysqlclient.dylib

そして、/usr/local/Cellar/mysql/5.7.9/libには以下が見つかります:
libmysqlclient.20.dylib

それと同じディレクトリにシンボリックリンクがある:libmysqlclient.dylib -> libmysqlclient.20.dylib

Python forget libmysqlclient.18.dylibの作り方?

では、手動でさらに別のシンボリックリンクを追加せずに、どのようにしてPython /usr/local/lib/libmysqlclient.18.dylibを忘れて/usr/local/libからlibmysqlclient.dylibの正しいシンボリックリンクをたどることができますか?

17
Dave Everitt

これは私の場合の私の問題を解決しました:

$ pip uninstall MySQL-python
$ pip install mysqlclient

MySQL-pythonは非常に古いことが判明しました(最後のコミットは7年前でした)。 mysqlclientは最新バージョンであり、多くの改善とバグ修正が行われています。

8
Ranel Padon

私もこの問題に遭遇しました。 MySQL-pythonをアンインストールしてからインストールしました。

pip uninstall MySQL-python
pip install MySQL-python

更新(コメントに基づく)

場合によっては、次の方法で2番目の(インストール)ステップを実行する必要があります。

pip install --no-binary MySQL-python MySQL-python

no-binary オプションは、pipがそれを新しく構築し、正しいライブラリにリンクできるようにするためのものです。

--no-binary <format_control>

バイナリパッケージは使用しないでください。複数回指定でき、そのたびに既存の値に追加されます。 :all:を使用してすべてのバイナリパッケージを無効にするか、:none:を使用してセットを空にするか、1つ以上のパッケージ名の間にカンマを入れます。一部のパッケージはコンパイルが難しいため、このオプションを使用するとインストールに失敗する場合があります。

NB:MySQL-pythonについて言及する必要があることに注意してください twice 。上記のように、最初の出現はno-binaryオプションを適用するパッケージの名前で、2番目の出現はインストールするパッケージを指定します。

31
Aplusplus

mysqlclientの開発バージョンを使用する必要があります:

pip install git+https://github.com/PyMySQL/mysqlclient-python.git@master

Python 3.4で最新のPyPIバージョン(1.3.7)を入手する前は、libmysqlclient.18.dylib(MySQL 5.6から)を検索していましたが、libmysqlclient.20.dylib(from MySQL 5.7)。

Python 3を使用する場合、MySQL-pythonはオプションではありません(およびmysqlclientが新しいバージョンです)。

13
Piotr Migdal

libmysqlclient.18.dylibの不足に関する問題が発生した場合:

  1. 公式リンクからmysql 5.6をダウンロードします: https://dev.mysql.com/downloads/mysql/

  2. インストールする

  3. 端末内-mdfind libmysqlclient | grep .18.

  4. 出力をコピーする

  5. Sudo ln -s [the output from previous command] /usr/local/lib/libmysqlclient.18.dylib

8
Dar Ben-Tov