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的目录。 它包含你需要的所有头文件和库,并将这些头文件和库文件复制到相应的位置。