我在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
许多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
libmysqlclient.18.dylib
?那么我怎样才能让Python忘记/usr/local/lib/libmysqlclient.18.dylib
并在/usr/local/lib
到libmysqlclient.dylib
中使用正确的符号链接,而无需手动添加另一个符号链接?
答案 0 :(得分:30)
我也遇到过这个问题。我卸载了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>
不要使用二进制包。可以多次提供,每次都会增加现有值。接受:all:禁用所有二进制包,:none:清空集合,或者在它们之间用逗号表示一个或多个包名称。请注意,某些软件包编译起来很棘手,并且在使用此选项时可能无法安装。
注意:请注意,需要提及MySQL-python
twice。如上所述,第一次出现是要应用no-binary
选项的包的名称,第二次是指定要安装的包。
答案 1 :(得分:12)
您需要使用mysqlclient
的开发版本:
pip install git+https://github.com/PyMySQL/mysqlclient-python.git@master
在我使用Python 3.4上最新的PyPI版本(1.3.7)之前,它正在搜索libmysqlclient.18.dylib
(来自MySQL 5.6),而我只有libmysqlclient.20.dylib
(来自MySQL 5.7)。
如果使用Python 3,MySQL-python
不是一个选项(mysqlclient
是其新版本)。
答案 2 :(得分:8)
这解决了我的问题:
$ pip uninstall MySQL-python
$ pip install mysqlclient
MySQL-python
原来是非常古老的(最后一次提交是7年前)。 mysqlclient
是它的现代版本,有很多改进和错误修复。
答案 3 :(得分:4)
如果遇到缺少libmysqlclient.18.dylib
的问题:
从官方链接下载mysql 5.6:https://dev.mysql.com/downloads/mysql/
安装
- mdfind libmysqlclient | grep .18.
复制输出
sudo ln -s [the output from previous command] /usr/local/lib/libmysqlclient.18.dylib