Python mysqldb:未加载库:libmysqlclient.18.dylib

我刚刚在我的Mac OS 10.6上编译并安装了python 2.7的mysqldb。 我创build了一个简单的testing文件,导入

import MySQLdb as mysql 

首先,这个命令是红色的下划线,信息告诉我“未解决的导入”。 然后我试图运行以下简单的Python代码

 import MySQLdb as mysql def main(): conn = mysql.connect( charset="utf8", use_unicode=True, host="localhost",user="root", passwd="",db="" ) if __name__ == '__main__'(): main() 

执行它时,我得到以下错误信息

 Traceback (most recent call last): File "/path/to/project/Python/src/cvdv/TestMySQLdb.py", line 4, in <module> import MySQLdb as mysql File "build/bdist.macosx-10.6-intel/egg/MySQLdb/__init__.py", line 19, in <module> \namespace cvdv File "build/bdist.macosx-10.6-intel/egg/_mysql.py", line 7, in <module> File "build/bdist.macosx-10.6-intel/egg/_mysql.py", line 6, in __bootstrap__ ImportError: dlopen(/Users/toom/.python-eggs/MySQL_python-1.2.3-py2.7-macosx-10.6-intel.egg-tmp/_mysql.so, 2): Library not loaded: libmysqlclient.18.dylib Referenced from: /Users/toom/.python-eggs/MySQL_python-1.2.3-py2.7-macosx-10.6-intel.egg-tmp/_mysql.so Reason: image not found 

什么可能是解决我的问题?

编辑:其实我发现图书馆在/ usr / local / mysql / lib。 所以我需要告诉我的pydev eclipse版本在哪里find它。 我在哪里设置?

我通过创build一个图书馆的符号链接解决了这个问题。 即

实际的图书馆驻留在

 /usr/local/mysql/lib 

然后我创build了一个符号链接

 /usr/lib 

使用命令:

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

所以我有以下映射:

 ls -l libmysqlclient.18.dylib lrwxr-xr-x 1 root wheel 44 16 Jul 14:01 libmysqlclient.18.dylib -> /usr/local/mysql/lib/libmysqlclient.18.dylib 

就是这样。 之后,一切正常。

编辑:

请注意,自MacOS El Capitan以来,系统完整性保护(SIP,也称为“无根”)将阻止您在/usr/lib/创build链接。 您可以按照以下说明禁用SIP,但可以在/usr/local/lib/创build链接:

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

我的首选方法是实际修复库,而不是根据应用程序的运行方式来使用环境variables,这些环境variables可能实际上不在实际范围内。 这实际上是一个相当简单的过程。

首先,查看错误输出以查看有问题的python模块的位置:

ImportError:dlopen(/Library/Python/2.7/site-packages/_mysql.so,2):Library not loaded:libmysqlclient.18.dylib引用自:/Library/Python/2.7/site-packages/_mysql.so原因:图像未find

好的,所以有问题的文件是/Library/Python/2.7/site-packages/_mysql.so

接下来,找出_mysql.so在哪里应该findlibmysqlclient.18.dylib:

 % otool -L /Library/Python/2.7/site-packages/_mysql.so /Library/Python/2.7/site-packages/_mysql.so: libmysqlclient.18.dylib (compatibility version 18.0.0, current version 18.0.0) /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 169.3.0) 

所以,它正在寻找没有path信息的libmysqlclient.18.dylib,让我们来修复:

 % sudo install_name_tool -change libmysqlclient.18.dylib /usr/local/mysql/lib/libmysqlclient.18.dylib /Library/Python/2.7/site-packages/_mysql.so 

现在,_mysql.so知道库的完整path,一切工作,不pipe环境variables如何。

 % otool -L /Library/Python/2.7/site-packages/_mysql.so /Library/Python/2.7/site-packages/_mysql.so: /usr/local/mysql/lib/libmysqlclient.18.dylib (compatibility version 18.0.0, current version 18.0.0) /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 169.3.0) 

我发现这个问题还有另一个解决scheme,而不是创build一个符号链接。

将libmysqlclient.18.dylib所在的目录path设置为DYLD_LIBRARY_PATH环境variables。 我所做的是在我的.bash_profile中放入以下行:

 export DYLD_LIBRARY_PATH=/usr/local/mysql-5.5.15-osx10.6-x86/lib/:$DYLD_LIBRARY_PATH 

而已。

在我的情况下,我得到了Mac OS X 10.9 Mavericks的错误。 我直接从DMG的Oracle / MySQL网站安装MySQL社区服务器。

我所需要做的就是将lib文件符号链接到/ usr / local / lib目录。

 mkdir -p /usr/local/lib ln -s /usr/local/mysql/lib/libmysql* /usr/local/lib 

奖励:如果您运行的是Mac OS X,则有一个很好的工具可以find像libmysqlclient.18.dylib文件( http://apps.tempel.org/FindAnyFile)这样的文件。; 这是我最初如何finddylib文件的位置。

我发现把它放在你的.profile或.bashrc(无论你使用哪一个)是最简单的方法,sym链接比起在源文件中保留path是凌乱的。

还比较了yoshisurfs的答案,大部分的时候当mysql被安装时,mysql目录应该被重命名为只是mysql,而不是整个文件名,以方便使用。

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

在pydev eclipse插件中,可能需要为DYLD设置环境variables。 path可以如图所示设置

在雪豹上安装mysqldb

对于那些使用自制软件,你可能会解决这个问题:

 $ brew link mysql 

当你在EI Capitan时,会得到错误: ln: /usr/lib/libmysqlclient.18.dylib: Operation not permitted需要closures“系统完整性保护”。

首先,重启并按住cmd + R进入恢复模式,然后启动terminal并键入命令: csrutil disable ,现在可以重新启动csrutil disable试。

在新的El Capitan安装中,默认情况下,SIP(无根防止访问usr / lib /)处于启用状态,除非处于恢复模式,否则无法创build符号链接。 正如@yannisxu说,你可以禁用SIP,并做你的符号链接到/ usr / lib /本地,这将工作。

您可以在MAC OSX El Capitan上使用以下命令而不是closuresSIP:

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

曾经有一个选项可以作为root用户login,这可以禁用SIP,但在最终版本已经过时,你可以在这里阅读更多关于它的信息: https : //forums.developer.apple.com/thread/4686

题:

开发人员Beta 1中提供了一个nvram boot-args命令,可以在使用root权限运行时禁用SIP:

 nvram boot-args="rootless=0" 

El Capitan发布版本中是否也有这种禁用SIP的选项? 或者这是严格的开发人员构build?

回答:

这个nvram boot-args命令将会消失。 它不会在El Capitan发布版本中提供,并可能在开发人员testing版结束之前消失。 留意未来的开发者testing版发行说明。

我遇到了一些虚拟环境。

 pip uninstall MySQL-python pip install -U MySQL-python 

两次工作。

我有这个问题,并花了一段时间才弄清楚如何解决这个问题。

我的情况稍有不同。 我的MySQL服务器的版本是5.1.x. 不知何故,我升级了我的MySQL-python从1.2.3到1.2.5。 从那时起,我一直在收到这个问题,我添加了下面的软链接。

 libmysqlclient.18.dylib -> /usr/local/mysql/lib/libmysqlclient.18.dylib 

事实certificate,对于MySQL 5.1.x,没有libmysqlclient.18.dylib,只有libmysqlclient.16.dylib。 你可以通过将你的MySQL-python降级到1.2.3或者把你的MySQL服务器升级到5.6.x来解决这个问题(我还没有试过5.5.x)

我把库降级到1.2.3,因为升级MySQL不是我的select。

在我的情况下,在El Capitan(OSX 10.11)中,我必须在~/.bash_profile

 export DYLD_LIBRARY_PATH="/usr/local/mysql/lib:${DYLD_LIBRARY_PATH}" export PATH="/usr/local/mysql/lib:${PATH}" 

请访问http://dev.mysql.com/downloads/connector/c/并下载MySQL Connector / C。 得到包后,创build一个新的目录'mysql',解压MySQL目录下的Mysql Connector文件,然后在mysql下创build另一个空目录'build',我们将使用'build'来构buildMySQL Connector / C. cd build && cmake ../your-MySQL-Connector-source-dir在make install之后make && make install,会在/ usr / local下面得到一个名为mysql的目录。 它包含你需要的所有头文件和库,并将这些头文件和库文件复制到相应的位置。