内容纲要
背景
这几天遇到一个问题,在mac环境下写python脚本,发现自建的mysql无法调用。报错如下:
ImportError: dlopen(/Users/geenquan/miniconda2/envs/py27/lib/python2.7/site-packages/MySQLdb/_mysql.so, 2): Library not loaded: @rpath/libmysqlclient.21.dylib
Referenced from: /Users/geenquan/miniconda2/envs/py27/lib/python2.7/site-packages/MySQLdb/_mysql.so
Reason: image not found
。
这个问题在百度上找了很久,但是没有具体的解决方案。后来查找了谷歌,找到了解决办法。
原因
造成这个现象的原因是,mysql的包(libmysqlclient.21.dylib)找不到,所以解决办法比较明确,让程序能找到的就可以。
解决办法
解决办法也比较直接,让程序直接能找到即可。第一种方法,也是谷歌上推荐最多的,对这个包进行一个链接。通过ln命令把libmysqlclient.21.dylib包连接到/usr/lib下面,这样全局都能用了。
首先找到libmysqlclient.21.dylib的位置,在macos中存在于/usr/local/mysql/lib下,现在需要把它链接到/usr/lib下,具体命令如下:
sudo ln -s /usr/local/mysql/lib/libmysqlclient.21.dylib /usr/lib/libmysqlclient.21.dylib
但是遇到一个新的问题,在macos中报权限不允许的错
ln: /usr/lib/libmysqlclient.21.dylib: Operation not permitted
经过查询得知,macos不允许对/usr/lib下的文件进行链接,那么就把这条路堵死了。
后来想到了既然usr/lib是一个全局能找到的地址,那我把这个文件放在环境变量里是否就可以了。于是,在~/.barhrc_profile下增加一行环境变量
export DYLD_LIBRARY_PATH=/usr/local/mysql/lib:$DYLD_LIBRARY_PATH
执行命令
source .barhrc_profile
再次调用,发现问题已经解决。希望这篇博客能够帮助到大家,解决mac环境下的mysql包的问题。