Libmysqlclient.18.dylib изображение не найдено при использовании MySQL из Django в OS X
Я начинаю идти по пути изучения Python/Django и ударил свою первую загвоздку. При попытке установить мою базу данных в settings.py
, внутренний сервер выходит из строя с помощью:
File "/Library/Python/2.7/site-packages/django/db/backends/mysql/base.py", line 16, in <module>
raise ImproperlyConfigured("Error loading MySQLdb module: %s" % e)
django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module: dlopen(/Users/rob/.python-eggs/MySQL_python-1.2.3-py2.7-macosx-10.7-intel.egg-tmp/_mysql.so, 2): Library not loaded: libmysqlclient.18.dylib
Referenced from: /Users/rob/.python-eggs/MySQL_python-1.2.3-py2.7-macosx-10.7-intel.egg-tmp/_mysql.so
Reason: image not found
Есть много решений, которые я нашел, в основном с явным определением моего значения DYLD_LIBRARY_PATH
, но это не работает для меня. MysQL-Python
(v1.2.3).
Любая идея, что мне может понадобиться, чтобы пропустить это?
Спасибо.
UPDATE
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
'NAME': 'django_tutorial', # Or path to database file if using sqlite3.
'USER': 'root', # Not used with sqlite3.
'PASSWORD': '', # Not used with sqlite3.
'HOST': '', # Set to empty string for localhost. Not used with sqlite3.
'PORT': '', # Set to empty string for default. Not used with sqlite3.
}
}
Ответы
Ответ 1
Из ваших комментариев, похоже, что libmysqlclient
dylib был установлен с не-абсолютным именем библиотеки. Это противоречит стандартной практике OS X, которая отличается от большинства других Unix-y систем в этом отношении. Вы должны иметь возможность постоянно исправлять проблему (по крайней мере до следующего обновления) путем изменения пути в .so файле с помощью install_name_tool
или вы можете заставить его работать, гарантируя, что ваш экземпляр Django запущен со следующей переменной среды
export DYLD_LIBRARY_PATH=/usr/local/mysql/lib
Вы также можете заставить его работать, создав символическую ссылку в /usr/local/lib
для dylib в /usr/local/mysql/lib
, так как /usr/local/lib
находится в пути динамической загрузки по умолчанию, поэтому (непроверенный!) что-то вроде:
sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/local/lib/libmysqlclient.18.dylib
Лучшим долгосрочным решением является не использование сломанной клиентской установки MySQL, как предлагается в Python import MySQLdb error - Mac 10.6.
Ответ 2
Используя homebrew установка mysql
, это сработало для меня:
$ mdfind libmysqlclient
/usr/local/Cellar/mysql/5.7.9/lib/libmysqlclient.20.dylib
/usr/local/Cellar/mysql/5.7.9/lib/libmysqlclient.a
/usr/local/Cellar/mysql/5.6.27/lib/libmysqlclient.18.dylib
/usr/local/Cellar/mysql/5.6.27/lib/libmysqlclient.a
/usr/local/Cellar/mysql/5.6.26/lib/libmysqlclient.18.dylib
/usr/local/Cellar/mysql/5.6.26/lib/libmysqlclient.a
$ sudo ln -s /usr/local/Cellar/mysql/5.6.27/lib/libmysqlclient.18.dylib /usr/local/lib/libmysqlclient.18.dylib
Ответ 3
Удостоверьтесь, что у вас есть не только MySql-Python, но и реальный MySql. MySQL-python пытается загрузить библиотеку mysql, которая должна быть где-то вроде /usr/local/mysql -VERSION/lib.
Попробуйте запустить
mdfind libmysqlclient
в командной строке. Просмотрите эти результаты, и если вы не видите файл, который он отсутствует (libmysqlclient.18.dylib), то, вероятно, у вас нет надлежащего mysql.
Ответ 4
Вероятно, вы недавно обновили mysql. Я получил эту проблему, когда обновил MySql с 5.6 до 5.7 с помощью brew. Это определенно сломало некоторые библиотеки, но повторная mysql вернулась к 5.6, исправила проблему.
Итак, сначала посмотрите, какую версию mysql вы ранее имели:
brew info mysql
и после возврата к этой версии с помощью команды brew switch mysql 5.6.22
, например.
Ответ 5
Вы можете показать нам свой код settings.py?
вы также можете попробовать отредактировать путь к файлу mysql_config, чтобы указать на /usr/local/mysql/bin/mysql _config, как более подробно описано в этой статье:
http://dakrauth.com/blog/entry/python-and-django-setup-mac-os-x-leopard/
Ответ 6
У меня недостаточно репутации, чтобы комментировать Ned Deily ответ выше:), но метод переменной окружения работал у меня после исправления опечатки; это должно быть:
export DYLD_LIBRARY_PATH=/usr/local/mysql/lib
Если вы идете по этому маршруту, я бы предложил две вещи; убедитесь, что вы не используете bash любые другие настройки DYLD_LIBRARY_PATH, используя
export DYLD_LIBRARY_PATH=$DYLD_LIBARY_PATH:/usr/local/mysql/lib
и поместите его в ваш .bashrc файл, поэтому вам не нужно запоминать его в каждом сеансе терминала.
Преимущество этого метода над опцией symlink заключается в том, что он позволит найти все файлы dylib mysql, а не только те, которые вы специально обозначили.