Подтвердить что ты не робот

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.
  }
}
4b9b3361

Ответ 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, а не только те, которые вы специально обозначили.