Python:MySQLdb和"未加载库:libmysqlclient.16.dylib"

ren*_*nat 61 python mysql macos osx-snow-leopard

设置......

试图设置一个干净的Mac OS X 10.6安装来开发python/django,我不记得在10.5上遇到这个问题.

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

$ sudo pip install MySQL-python
Run Code Online (Sandbox Code Playgroud)

它似乎顺利(下面的输出)

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...
Run Code Online (Sandbox Code Playgroud)

在此之后我尝试了:

$ python -c "import MySQLdb"
Run Code Online (Sandbox Code Playgroud)

它在我身上扯了一下:

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
Run Code Online (Sandbox Code Playgroud)

那么就我的问题......

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

谷歌搜索(并在此搜索)返回了很多结果,使用Ruby获取此错误消息并不太多.

luk*_*mdo 94

只需设置DYLD_LIBRARY_PATH运行后pip installeasy_install:

export DYLD_LIBRARY_PATH=/usr/local/mysql/lib/
Run Code Online (Sandbox Code Playgroud)

应该做的工作假设您的MySQL安装在/usr/local/mysql.

  • 谢谢.我找到了很多关于**为什么**这个问题存在的解释,但这是我发现的第一个答案,我只是快速解决了这个问题.干杯. (3认同)
  • @thomallen如果使用`virtualenv`你可以在你的`bin/activate`脚本中设置/取消它,否则我会推荐`〜/ .bash_profile`. (2认同)

Bri*_*per 55

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

您需要回答的问题:

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

  • 我在Snow Leopard 10.6.6上有类似的问题,带有Xcode4(没有PPC支持),我最终不得不将DYLD_LIBRARY_PATH添加到我的bash配置文件中,因为:``export DYLD_LIBRARY_PATH =/usr/local/mysql/lib:$ DYLD_LIBRARY_PATH``.从来没有在以前的安装中这样做.我讨厌这个包裹多大年纪和笨重. (30认同)
  • 在Unix Bourne shell类shell(例如`bash`)中,shell变量默认是本地的; 也就是说,它们不会被放入环境中,而是保持在本地流程中.`export`关键字将变量标记为"导出到环境".因此,链接器(shell的子进程)实际上可以看到变量.只设置DYLD_LIBRARY_PATH而不导出它,意味着它只是该shell的本地 - 因此,没有帮助解决这个问题. (2认同)

小智 41

在easy_install之后,我创建了一个解决问题的软链接

sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/local/lib/libmysqlclient.18.dylib
Run Code Online (Sandbox Code Playgroud)


Cat*_*lin 8

如果你的MySQL客户端比你的MySQL-python包更新,它也会出现.就我而言,我的机器上有一个libmysqlclient_r.18.dylib,但不是libmysqlclient_r.16.dylib.跑步pip search mysql透露

MySQL-python - MySQL的Python接口安装:1.2.3最新:1.2.3c1

并运行pip install --upgrade MySQL-python修复我的问题.

  • 很棒,这是我的问题.值得一提的是--upgrade实际上似乎没有正确升级,而使用安装MySQL-python == [最新版本] (2认同)

Ant*_*nko 7

在最新版本的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
Run Code Online (Sandbox Code Playgroud)


小智 7

在我的设置(来自brew,pyenv的mysql 5.7.x)中,我有一个较新的lib文件libmysqlclient.20.dylib.有用的是pip uninstall MySQL-pythonpip install MySQL-python.