【发布时间】:2016-04-04 20:44:29
【问题描述】:
使用 Homebrew 安装 MySQL 和 Python
我在 OS X 10.10.5 Yosemite 上使用 Homebrew 安装了 MySQL 和 Python。我的 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
现有答案
许多answers to this problem on 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 中的正确符号链接,而无需手动添加另一个符号链接?
【问题讨论】:
-
遵循同样的困惑路径 - 重要的区别是我认为最新的 brew install 提供的 libmysqlclient.20.dylib 不是 18 并且 Aplusplus 建议的重新安装 MySQL 也为我回答了这个问题。
-
为我
pip install mysqlclient解决了问题
标签: python mysql homebrew mysql-python