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, где ее найти. Где я могу это установить?
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, вы можете установить переменную окружения для сотового оператора. Путь может быть установлен, как показано в
я столкнулся с этим с несколькими виртуальными средами.
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_profileexport 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