libmysqlclient.xx.dylib在虚拟环境下import error解决
类似这种报错,image not found
import MySQLdb
Traceback (most recent call last):
File “”, line 1, in
File “/Users/jtr109/qs/venv/lib/python2.7/site-packages/MySQLdb/init.py”, line 19, in
import _mysql
ImportError: dlopen(/Users/qs/venv/lib/python2.7/site-packages/_mysql.so, 2): Library not loaded: /usr/local/opt/mysql/lib/libmysqlclient.20.dylib
Referenced from: /Users/jtr109/qs/venv/lib/python2.7/site-packages/_mysql.so
Reason: image not found
环境:Mac os+anaconda3, 虚拟环境python=3.5
-
用otool查看下指向位置信息:
otool -L /Users/[username]/anaconda3/envs/[envname]/lib/python3.5/site-packages/MySQLdb/_mysql.cpython-35m-darwin.so
@rpath/libmysqlclient.21.dylib (compatibility version 21.0.0, current version 21.0.0)
@rpath/libssl.1.0.0.dylib (compatibility version 1.0.0, current version 1.0.0)
@rpath/libcrypto.1.0.0.dylib (compatibility version 1.0.0, current version 1.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1252.250.1)问题出在@rpath/libmysqlclient.21.dylib的@rpath,@rpath指向的相对路径不明,要打印出来需要花费另外一番功夫。我们绕过,用install_name_tool直接修改它为正确的绝对路径。
-
install_name_tool [-change old new] input
sudo install_name_tool -change @rpath/libmysqlclient.21.dylib /usr/local/mysql/lib/libmysqlclient.21.dylib /Users/[username]/anaconda3/envs/[envname]/lib/python3.5/site-packages/MySQLdb/_mysql.cpython-35m-darwin.so -
再次用otool查看下指向位置信息:
otool -L /Users/xiaojunzhou/anaconda3/envs/wand/lib/python3.5/site-packages/MySQLdb/_mysql.cpython-35m-darwin.so
/Users/xiaojunzhou/anaconda3/envs/wand/lib/python3.5/site-packages/MySQLdb/_mysql.cpython-35m-darwin.so:
/usr/local/mysql/lib/libmysqlclient.21.dylib (compatibility version 21.0.0, current version 21.0.0)
@rpath/libssl.1.0.0.dylib (compatibility version 1.0.0, current version 1.0.0)
@rpath/libcrypto.1.0.0.dylib (compatibility version 1.0.0, current version 1.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1252.250.1)
参考资料:
1.https://stackoverflow.com/questions/51002735/python-mysqldb-err-on-my-mac-library-not-loaded-rpath-libmysqlclient-21-dylib,见Sam S.的回答
2.https://stackoverflow.com/questions/6383310/python-mysqldb-library-not-loaded-libmysqlclient-18-dylib
解决不了的可以看看这个高赞答案,我这种不是软连接的问题