MySQL и Python установлены с Homebrew
Я установил MySQL и Python с Homebrew на OS X 10.10.5 Yosemite. Мой Python 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 MySQLdb
все еще пытался импортировать libmysqlclient.18.dylib
.
Затем я попробовал:
$ pip install -U MySQL-python
и получил: Requirement already up-to-date: MySQL-python in /usr/local/lib/python2.7/site-packages
Существующие ответы
Многие ответы на 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 забыть libmysqlclient.18.dylib
?
Итак, как я могу заставить Python забыть /usr/local/lib/libmysqlclient.18.dylib
и следовать правильной символической ссылке в /usr/local/lib
до libmysqlclient.dylib
, не добавляя вручную еще одну символическую ссылку?