Python mysqldb: библиотека не загружена: libmysqlclient.18.dylib - PullRequest
167 голосов
/ 17 июня 2011

Я только что скомпилировал и установил mysqldb для Python 2.7 на моем Mac OS 10.6.Я создал простой тестовый файл, который импортирует

import MySQLdb as mysql

Во-первых, эта команда подчеркнута красным, и информация говорит мне «Неразрешенный импорт».Затем я попытался запустить следующий простой код Python

import MySQLdb as mysql

def main():
    conn = mysql.connect( charset="utf8", use_unicode=True, host="localhost",user="root", passwd="",db="" )

if __name__ == '__main__'():
    main()

При его выполнении я получаю следующее сообщение об ошибке

Traceback (most recent call last):
  File "/path/to/project/Python/src/cvdv/TestMySQLdb.py", line 4, in <module>
    import MySQLdb as mysql
  File "build/bdist.macosx-10.6-intel/egg/MySQLdb/__init__.py", line 19, in <module>
    \namespace cvdv
  File "build/bdist.macosx-10.6-intel/egg/_mysql.py", line 7, in <module>
  File "build/bdist.macosx-10.6-intel/egg/_mysql.py", line 6, in __bootstrap__
ImportError: dlopen(/Users/toom/.python-eggs/MySQL_python-1.2.3-py2.7-macosx-10.6-intel.egg-tmp/_mysql.so, 2): Library not loaded: libmysqlclient.18.dylib
  Referenced from: /Users/toom/.python-eggs/MySQL_python-1.2.3-py2.7-macosx-10.6-intel.egg-tmp/_mysql.so
  Reason: image not found

В чем может быть решение моей проблемы?

РЕДАКТИРОВАТЬ: На самом деле я обнаружил, что библиотека находится в / usr / local / mysql / lib.Так что я должен сказать своей версии затмения pydev, где ее найти.Где я могу установить это?

Ответы [ 15 ]

321 голосов
/ 06 августа 2011

Я решил проблему, создав символическую ссылку на библиотеку.Т.е.

Фактическая библиотека находится в

/usr/local/mysql/lib

И затем я создал символическую ссылку в

/usr/lib

Используя команду:

sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib

так, чтобы у меня было следующее отображение:

ls -l libmysqlclient.18.dylib 
lrwxr-xr-x  1 root  wheel  44 16 Jul 14:01 libmysqlclient.18.dylib -> /usr/local/mysql/lib/libmysqlclient.18.dylib

Вот и все.После этого все работало нормально.

РЕДАКТИРОВАТЬ:

Обратите внимание, что, поскольку MacOS El Capitan, защита целостности системы (SIP, также известная как «rootless») будет препятствовать созданию ссылок в /usr/lib/.Вы можете отключить SIP, следуя этим инструкциям , но вместо этого вы можете создать ссылку в /usr/local/lib/:

sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/local/lib/libmysqlclient.18.dylib
132 голосов
/ 16 ноября 2012

Мой предпочтительный метод состоит в том, чтобы на самом деле исправить библиотеку, а не играть с переменными окружения, которые могут или не могут фактически находиться в области видимости, в зависимости от того, как выполняется приложение.На самом деле это довольно простой процесс.

Сначала посмотрите на вывод ошибок, чтобы увидеть, где находится неисправный модуль python:

ImportError: dlopen (/Library/Python/2.7/site-packages/_mysql.so, 2): библиотека не загружена: libmysqlclient.18.dylib Ссылка на: /Library/Python/2.7/site-packages/_mysql.so Причина: изображение не найдено

Хорошо, значит файл-нарушитель - /Library/Python/2.7/site-packages/_mysql.so

Затем выясните, где _mysql.so считает, что он должен найти libmysqlclient.18.dylib:

% otool -L /Library/Python/2.7/site-packages/_mysql.so
/Library/Python/2.7/site-packages/_mysql.so:
    libmysqlclient.18.dylib (compatibility version 18.0.0, current version 18.0.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 169.3.0)

Итак, он ищет libmysqlclient.18.dylib без информации о пути, давайте исправим это:

% sudo install_name_tool -change libmysqlclient.18.dylib /usr/local/mysql/lib/libmysqlclient.18.dylib /Library/Python/2.7/site-packages/_mysql.so

Теперь _mysql.so знает полный путь к библиотеке и все работает, независимо от того,переменных среды.

% otool -L /Library/Python/2.7/site-packages/_mysql.so                                                                                           
/Library/Python/2.7/site-packages/_mysql.so:
    /usr/local/mysql/lib/libmysqlclient.18.dylib (compatibility version 18.0.0, current version 18.0.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 169.3.0)
56 голосов
/ 10 августа 2011

Я обнаружил, что было другое решение этой проблемы, а не создание символической ссылки.

Вы задаете путь к вашему каталогу, в котором находится libmysqlclient.18.dylib, к переменной среды DYLD_LIBRARY_PATH. Что я сделал, так это вставил следующую строку в мой .bash_profile:

export DYLD_LIBRARY_PATH=/usr/local/mysql-5.5.15-osx10.6-x86/lib/:$DYLD_LIBRARY_PATH

Вот и все.

37 голосов
/ 28 октября 2013

В моем случае я получал ошибку с Mac OS X 10.9 Mavericks.Я установил MySQL Community Server непосредственно с веб-сайта Oracle / MySQL от DMG.

Все, что мне нужно было сделать, это символическую ссылку на файлы lib в каталог / usr / local / lib.

mkdir -p /usr/local/lib   
ln -s /usr/local/mysql/lib/libmysql* /usr/local/lib

Бонус: если вы также используете Mac OS X, есть отличный инструмент для поиска файлов, таких как файл libmysqlclient.18.dylib, http://apps.tempel.org/FindAnyFile. Это то, как я изначальнонашел расположение файла dylib.

21 голосов
/ 29 июня 2012

Я обнаружил, что помещать это в ваш .profile или .bashrc (в зависимости от того, что вы используете) - самый простой способ сделать это, ссылки на sym беспорядочные по сравнению с хранением путей в ваших исходных файлах.

Также, по сравнению с ответом yoshisurfs, большую часть времени, когда mysql устанавливается, каталог mysql должен быть переименован в mysql, а не в полное имя файла, для простоты использования.

export DYLD_LIBRARY_PATH=/usr/local/mysql/lib:$DYLD_LIBRARY_PATH
4 голосов
/ 29 июня 2017

Я столкнулся с этим с парой виртуальных сред.

pip uninstall MySQL-python
pip install -U MySQL-python

Работал оба раза.

3 голосов
/ 01 февраля 2015

Для тех, кто использует домашний напиток, вы можете исправить это следующим образом:

3 голосов
/ 30 июня 2011

В плагине pydev eclipse вы можете установить переменную окружения для DYLD.Путь может быть установлен, как показано в

Установить mysqldb на снежного барса

2 голосов
/ 09 сентября 2015

когда вы находитесь в El Capitan, появится сообщение об ошибке: ln: /usr/lib/libmysqlclient.18.dylib: Operation not permitted необходимо закрыть «Защита целостности системы».

сначала перезагрузите компьютер и удерживайте cmd + R, чтобы войти в режим восстановления, затем запуститетерминала и введите команду: csrutil disable, теперь вы можете перезагрузить компьютер и повторить попытку.

1 голос
/ 04 ноября 2015

В моем случае в El Capitan (OSX 10.11) я должен выполнить следующие действия в ~/.bash_profile

export DYLD_LIBRARY_PATH="/usr/local/mysql/lib:${DYLD_LIBRARY_PATH}"
export PATH="/usr/local/mysql/lib:${PATH}"
...