Booting up a Django project, I ran into the following problem:
django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module: dlopen(/Users/siawyoung/.pyenv/versions/test-venv/lib/python2.7/site-p ackages/_mysql.so, 2): Library not loaded: /usr/local/lib/libmysqlclient.18.dylib Referenced from: /Users/siawyoung/.pyenv/versions/test-venv/lib/python2.7/site-packages/_mysql.so
Googling around for solutions was really confusing because there seemed to be a mix of old and recent problems and solutions, like this StackOverflow question which was asked 4 years ago regarding OS X 10.6, but with answers from this year addressing El Capitan (yes, I know, wtf). Another one exactly like it.
I installed mySQL with
brew, but wherever it is, you can find the file:
$ find /usr -name "libmysqlclient.18.dylib" /usr/local/Cellar/mysql/5.6.25/lib/libmysqlclient.18.dylib /usr/local/Cellar/mysql/5.6.27/lib/libmysqlclient.18.dylib
It seemed the cleanest way was to use
install_name_tool, so I tried it:
sudo install_name_tool -change libmysqlclient.18.dylib /usr/local/Cellar/mysql/5.6.27/lib/libmysqlclient.18.dylib /Users/siawyoung/.pyenv/versions/test-venv/lib/python2.7/site-packages/_mysql.so
But that didn’t work.
After a quick google and wading through tons of non-starters, I finally found a fix: all you have to do (inside the
pyenv) is set the environment variable
DYLD_LIBRARY_PATH like so:
$ export DYLD_LIBRARY_PATH=/usr/local/Cellar/mysql/5.6.27/lib
It’s not the most elegant solution, but it’s the simplest and least intrusive one.