Python 的 MySQLdb 无法使用 Homebrewed MySQL 找到 libmysqlclient.dylib

标签 python mysql homebrew mysql-python

使用 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 处有一个符号链接(symbolic link).

/usr/local/bin 中有一个符号链接(symbolic link):
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 并得到: 要求已经更新:/usr/local/lib/python2.7/site-packages 中的 MySQL-python

现有答案

许多 answers to this problem on SO建议手动创建带有版本号的库的显式符号链接(symbolic link)(在我的情况下为 libmysqlclient.20.dylib)。然而,考虑到现有的符号链接(symbolic link),这似乎很粗糙,而且不是面向 future 的:

/usr/local/lib中有
libmysqlclient.dylib -> ../Cellar/mysql/5.7.9/lib/libmysqlclient.dylib

/usr/local/Cellar/mysql/5.7.9/lib 我们发现:
libmysqlclient.20.dylib

在同一目录中带有符号链接(symbolic link): libmysqlclient.dylib -> libmysqlclient.20.dylib

如何让Python忘记libmysqlclient.18.dylib

那么我怎样才能让 Python 忘记 /usr/local/lib/libmysqlclient.18.dylib 并遵循 /usr/local/lib 中的正确符号链接(symbolic link)到 libmysqlclient.dylib,无需手动添加另一个符号链接(symbolic link)?

最佳答案

我也遇到过这个问题。我卸载了 MySQL-python,然后安装了它。

pip uninstall MySQL-python
pip install MySQL-python

更新(基于评论)

在某些情况下,您可能需要按以下方式执行第二个(安装)步骤:

pip install --no-binary MySQL-python MySQL-python

no-binary 选项是让 pip 重新构建它并链接到正确的库:

--no-binary <format_control>

Do not use binary packages. Can be supplied multiple times, and each time adds to the existing value. Accepts either :all: to disable all binary packages, :none: to empty the set, or one or more package names with commas between them. Note that some packages are tricky to compile and may fail to install when this option is used on them.

注意:请注意,MySQL-python需要提及twice .如上所述,第一次出现的是要应用 no-binary 的包的名称。选项,第二个指定要安装的包。

关于Python 的 MySQLdb 无法使用 Homebrewed MySQL 找到 libmysqlclient.dylib,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34536914/

相关文章:

php - 如何在python中对onvif进行密码加密?

mysql - 为什么与 MariaDB 10.2 RAND() 函数发生如此多的冲突?

mysql - 在 MySql 查询中获取每个组的最大值

homebrew - 有没有办法在我的 .bash_profile 中加快对 brew --prefix 的调用?

Python - queue.task_done() 用于什么?

python - 来自 pandas DataFrame 的热图 - 二维数组

Python 的多个循环和线程问题

php - 动态 MySQLi 语句

Homebrew:无法符号链接(symbolic link),/usr/local/bin 不可写

boost - 如何通过 Homebrew 安装 boost?