使用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 shell中:
>>> 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
现有答案
许多答案在此问题上的Stack Overflow上建议手动创建带有版本号的库的显式符号链接(在我的情况下为 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
,而无需手动添加另一个符号链接呢?
pip install mysqlclient
解决了这个问题。 - ezdazuzena