Python的MySQLdb无法通过自制MySQL找到libmysqlclient.dylib

发布于 2021-01-29 15:07:02

与Homebrew一起安装的MySQL和Python

我在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

如何让Python忘记libmysqlclient.18.dylib

那么,如何让Python忘记/usr/local/lib/libmysqlclient.18.dylib,并按照正确的符号链接在/usr/local/liblibmysqlclient.dylib,无需手动添加另一个符号链接?

关注者
0
被浏览
159
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    这解决了我的问题:

    $ pip uninstall MySQL-python
    $ pip install mysqlclient
    

    MySQL-python原来非常老(最后一次提交是在7年前)。mysqlclient是它的现代版本,具有许多改进和错误修复。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看