我在OS X 10.10.5 Yosemite上安装了带有Homebrew的MySQL和MySQL。我的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
很多回答 这个 问题 的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
libmysqlclient.18.dylib
?那么,如何让Python忘记/usr/local/lib/libmysqlclient.18.dylib
,并按照正确的符号链接在/usr/local/lib
给libmysqlclient.dylib
,无需手动添加另一个符号链接?
这解决了我的问题:
$ pip uninstall MySQL-python
$ pip install mysqlclient
MySQL-python
原来非常老(最后一次提交是在7年前)。mysqlclient
是它的现代版本,具有许多改进和错误修复。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句