Python:MySQLdb和“Library not loaded:libmysqlclient.16.dylib”

设置…

试图设置一个干净的Mac OS X 10.6安装来开发python / django,我不记得在10.5上运行这个。

mysql-5.5.8-osx10.6-x86_64.dmg的安装程序安装MySQL后,我跑了

 $ sudo pip install MySQL-python 

它似乎顺利(输出下面)

 Downloading/unpacking MySQL-python Downloading MySQL-python-1.2.3.tar.gz (70Kb): 70Kb downloaded Running setup.py egg_info for package MySQL-python warning: no files found matching 'MANIFEST' warning: no files found matching 'ChangeLog' warning: no files found matching 'GPL' Installing collected packages: MySQL-python Running setup.py install for MySQL-python building '_mysql' extension gcc-4.2 -fno-strict-aliasing -fno-common -dynamic -DNDEBUG -g -fwrapv -Os -Wall -Wstrict-prototypes -DENABLE_DTRACE -pipe -Dversion_info=(1,2,3,'final',0) -D__version__=1.2.3 -I/usr/local/mysql/include -I/System/Library/Frameworks/Python.framework/Versions/2.6/include/python2.6 -c _mysql.c -o build/temp.macosx-10.6-universal-2.6/_mysql.o -Os -g -fno-common -fno-strict-aliasing -arch x86_64 In file included from _mysql.c:36: /usr/local/mysql/include/my_config.h:325:1: warning: "SIZEOF_SIZE_T" redefined In file included from /System/Library/Frameworks/Python.framework/Versions/2.6/include/python2.6/Python.h:9, from pymemcompat.h:10, from _mysql.c:29: /System/Library/Frameworks/Python.framework/Versions/2.6/include/python2.6/pymacconfig.h:33:1: warning: this is the location of the previous definition In file included from _mysql.c:36: /usr/local/mysql/include/my_config.h:419:1: warning: "HAVE_WCSCOLL" redefined In file included from /System/Library/Frameworks/Python.framework/Versions/2.6/include/python2.6/Python.h:8, from pymemcompat.h:10, from _mysql.c:29: /System/Library/Frameworks/Python.framework/Versions/2.6/include/python2.6/pyconfig.h:803:1: warning: this is the location of the previous definition gcc-4.2 -Wl,-F. -bundle -undefined dynamic_lookup build/temp.macosx-10.6-universal-2.6/_mysql.o -L/usr/local/mysql/lib -lmysqlclient_r -lpthread -o build/lib.macosx-10.6-universal-2.6/_mysql.so -arch x86_64 warning: no files found matching 'MANIFEST' warning: no files found matching 'ChangeLog' warning: no files found matching 'GPL' Successfully installed MySQL-python Cleaning up... 

之后我尝试了:

 $ python -c "import MySQLdb" 

它用下面的话把我扯出来了:

 Traceback (most recent call last): File "<string>", line 1, in <module> File "/Library/Python/2.6/site-packages/MySQLdb/__init__.py", line 19, in <module> import _mysql ImportError: dlopen(/Library/Python/2.6/site-packages/_mysql.so, 2): Library not loaded: libmysqlclient.16.dylib Referenced from: /Library/Python/2.6/site-packages/_mysql.so Reason: image not found 

所以在我的问题…

我做错了什么?/我还需要做什么?

谷歌search(在这里search)返回了很多结果得到这个错误消息与Ruby不太多的Python寿。

_mysql.so是指libmysqlclient.16.dylib 。 也就是说,作为Python和MySQL客户端库_mysql.so之间的桥梁的共享库引用了MySQL客户端库的dynamic库,并且该库由于某种原因而无法加载。

您需要回答的问题:

  • 系统上的任何位置是否有libmysqlclient.16.dylib ? 如果不是,则需要安装MySQL客户端软件。
  • 如果是这样,那么在DYLD_LIBRARY_PATH设置中是否包含该库的目录? 如果不是,请尝试添加它。
  • 如果是这样,你必须确保libmysqlclient.16.dylib文件没有损坏。 我的副本,安装在/opt/local/lib/mysql5/mysql/libmysqlclient.16.dylib ,由MacPorts提供,具有MD5签名c79ee91af08057dfc269ee212915801a ,大小为1,462,376字节。 你的副本是什么样的?

运行pip installeasy_install后,只需设置DYLD_LIBRARY_PATH

 export DYLD_LIBRARY_PATH=/usr/local/mysql/lib/ 

应该假设你的MySQL安装位于/usr/local/mysql

easy_install之后,我创build了一个软链接来解决问题

 sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/local/lib/libmysqlclient.18.dylib 

如果你的MySQL客户端比你的MySQL-python包新,它也会出现问题。 在我的情况下,我的机器上有一个libmysqlclient_r.18.dylib,但没有一个libmysqlclient_r.16.dylib。 运行pip search mysql显示

MySQL-python – MySQL的Python接口INSTALLED:1.2.3 LATEST:1.2.3c1

并运行pip install --upgrade MySQL-python解决了我的问题。

在最新版本的MySQL 5.7.9上,它不支持MySQL-python ,而是使用了PyMySQL库。 另外我在manage.py (在Django项目中)添加了这些行来模拟MySQL-python的API:

 try: # load MySQLdb interface emulation import pymysql pymysql.install_as_MySQLdb() except ImportError: pass 

在我的设置(从brew,pyenv mysql 5.7.x),我有一个新的lib文件libmysqlclient.20.dylibpip uninstall MySQL-pythonpip uninstall MySQL-pythonpip install MySQL-python