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
Ответ 6
В плагине eclipse pydev вы можете установить переменную среды для DYLD. Путь может быть установлен как показано в
Установить mysqldb на снежный барс
Ответ 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, здесь подробно