Python mysqldb: библиотека не загружена: libmysqlclient.18.dylib

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

import MySQLdb as mysql

Во-первых, эта команда красная подчеркнута, и информация сообщает мне "Unresolved import". Затем я попытался запустить следующий простой код 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

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

EDIT: На самом деле я узнал, что библиотека находится в /usr/local/mysql/lib. Поэтому мне нужно сообщить мою версию eclipse pydev, где ее можно найти. Где я могу установить это?

Ответ 1

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

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

/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

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

EDIT:

Обратите внимание, что с 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

Ответ 2

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

Сначала просмотрите вывод ошибки, чтобы увидеть, где находится уязвимый модуль 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)

Ответ 3

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

Вы устанавливаете путь к каталогу, где находится 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

Что это.

Ответ 4

В моем случае я получал ошибку с 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.

Ответ 5

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

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

export DYLD_LIBRARY_PATH=/usr/local/mysql/lib:$DYLD_LIBRARY_PATH

Ответ 7

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

$ brew link mysql

Ответ 8

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

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

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

Ответ 9

когда вы находитесь в Эль-Капитане, вы получите сообщение об ошибке: ln: /usr/lib/libmysqlclient.18.dylib: Operation not permitted необходимо закрыть "Защита целостности системы".

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

Ответ 10

В новой установке El Capitan, где SIP (rootless предотвращает доступ к usr/lib/) включен по умолчанию, и вы не можете создать символическую ссылку, если вы не находитесь в режиме восстановления. Поскольку @yannisxu сказал, что вы можете отключить SIP и сделать свою символическую ссылку в /usr/lib/local, и это будет работать.

вы можете использовать следующую команду на MAC OSX El Capitan вместо отключения SIP:

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

Раньше была опция, в которой вы можете войти в систему как пользователь root, и это может отключить SIP, но в окончательной версии, которая теперь устарела, вы можете прочитать об этом здесь: https://forums.developer.apple.com/thread/4686

Вопрос:

В Developer Beta 1 есть команда nvram boot-args, которая может отключить SIP при запуске с привилегиями root:

nvram boot-args="rootless=0"

Будет ли эта опция отключения SIP также доступна в версии El Capitan? Или это строго для сборки разработчиков?

Ответ:

Эта команда nvram boot-args исчезнет. Он не будет доступен в версии El Capitan и может исчезнуть до конца бета-версии разработчика. Следите за комментариями к выпуску для будущих бета-разработчиков.

Ответ 11

В моем случае, в 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}"

Ответ 12

У меня была эта проблема, и мне потребовалось некоторое время, чтобы понять, как это исправить.

Мой случай немного отличается. Мой сервер MySQL имеет версию 5.1.x. И как-то я обновил свой MySQL-python с 1.2.3 до 1.2.5. И я продолжал получать эту проблему с тех пор, когда я добавил следующую мягкую ссылку.

libmysqlclient.18.dylib -> /usr/local/mysql/lib/libmysqlclient.18.dylib

Оказывается, для MySQL 5.1.x нет libmysqlclient.18.dylib, но только libmysqlclient.16.dylib. Вы можете исправить эту проблему, либо понизив ваш MySQL-python до 1.2.3, либо обновив свой сервер MySQL до 5.6.x(я не пробовал 5.5.x.)

Я понизил библиотеку до версии 1.2.3, поскольку обновление MySQL для меня не является вариантом.

Ответ 13

перейдите в http://dev.mysql.com/downloads/connector/c/ и загрузите MySQL Connector/C. после получения пакета создайте новый каталог "mysql", распакуйте файл Mysql Connector в каталоге mysql, затем в mysql создайте еще один пустой каталог "build". Мы будем использовать "build" для сборки MySQL Connector/C. cd build && & cmake../your-MySQL-Connector-source-dir make && сделать установку после make install вы получите каталог с именем mysql под /usr/local. он содержит все заголовки и библиотеки, которые вам нужны .go в эту dirctory, и скопируйте заголовки и библиотеки в соответствующие местоположения.

Ответ 14

ты можешь попробовать:

sudo install_name_tool -change libmysqlclient.18.dylib /Users/toom/.python-eggs/MySQL_python-1.2.3-py2.7-macosx-10.6-intel.egg-tmp/_mysql.so'

Ответ 15

Примечание об ошибке MySQL Connector/C в macOS (моя текущая версия 10.13.2), исправьте mysql_config и переустановите mysqlclient или MySQL-python, здесь подробно