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



Я только что скомпилировал и установил 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 eclipse, где ее найти. Где я могу это установить?

501   14  

14 ответов:

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

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

/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, также известный как" без корней") помешает вам создавать ссылки в /usr/lib/. Вы можете отключить SIP, следуя эти инструкции, но вы можете создать ссылку в /usr/local/lib/ вместо:

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

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

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

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

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

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

вот и все.

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

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

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

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

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

установите mysqldb на snow leopard

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

$ brew link mysql

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

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

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

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

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

на новой установке 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

вопрос:

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

nvram boot-args="rootless=0"

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

ответ:

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

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

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

мой случай немного отличается. Мой сервер MySQL имеет версию 5.1.х. И как-то я обновил версию 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 не является для меня вариантом.

перейти к 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 принять && сделать установку после выполнения установки вы получите каталог с именем mysql под /usr / local. он содержит все заголовки и библиотеки вам нужны.перейдите в этот dirctory и скопируйте заголовки и библиотеки в соответствующие места.

можно попробовать:

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`

Comments

    Ничего не найдено.