Python mysqldb: Biblioteca no cargada: libmysqlclient.18.dylib

Acabo de comstackr e instalar mysqldb para Python 2.7 en mi sistema operativo 10.6. He creado un archivo de prueba simple que importa

import MySQLdb as mysql 

En primer lugar, este comando está subrayado en rojo y la información me dice “Importación sin resolver”. Entonces intenté ejecutar el siguiente código de Python simple

 import MySQLdb as mysql def main(): conn = mysql.connect( charset="utf8", use_unicode=True, host="localhost",user="root", passwd="",db="" ) if __name__ == '__main__'(): main() 

Al ejecutarlo me sale el siguiente mensaje de error

 Traceback (most recent call last): File "/path/to/project/Python/src/cvdv/TestMySQLdb.py", line 4, in  import MySQLdb as mysql File "build/bdist.macosx-10.6-intel/egg/MySQLdb/__init__.py", line 19, in  \namespace cvdv File "build/bdist.macosx-10.6-intel/egg/_mysql.py", line 7, in  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 

¿Cuál podría ser la solución a mi problema?

EDITAR: En realidad, descubrí que la biblioteca se encuentra en / usr / local / mysql / lib. Así que necesito decirle a mi versión de Pydev Eclipse dónde encontrarlo. ¿Dónde pongo esto?

Resolví el problema creando un enlace simbólico a la biblioteca. Es decir

La biblioteca actual reside en

 /usr/local/mysql/lib 

Y luego creé un enlace simbólico en

 /usr/lib 

Usando el comando:

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

de modo que tengo el siguiente mapeo:

 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 

Eso fue todo. Después de eso todo funcionó bien.

EDITAR:

Tenga en cuenta que, desde MacOS El Capitán, la protección de integridad del sistema (SIP, también conocida como “desarraigado”) le impedirá crear enlaces en /usr/lib/ . Puede deshabilitar SIP siguiendo estas instrucciones , pero puede crear un enlace en /usr/local/lib/ lugar:

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

Mi método preferido es arreglar la biblioteca en lugar de jugar con variables de entorno que pueden o no estar en el scope, dependiendo de cómo se ejecute la aplicación. Este es en realidad un proceso bastante simple.

Primero, mire la salida de error para ver dónde se encuentra el módulo Python ofensivo:

ImportError: dlopen (/Library/Python/2.7/site-packages/_mysql.so, 2): Biblioteca no cargada: libmysqlclient.18.dylib Referencia desde: /Library/Python/2.7/site-packages/_mysql.so Reason: imagen no encontrada

Bien, entonces el archivo ofensivo es /Library/Python/2.7/site-packages/_mysql.so

A continuación, averigüe dónde _mysql.so cree que debería encontrar 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) 

Entonces, está buscando libmysqlclient.18.dylib sin información de ruta, vamos a arreglar eso:

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

Ahora _mysql.so conoce la ruta completa a la biblioteca y todo funciona, independientemente de las variables de entorno.

 % 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) 

Encontré que había otra solución para este problema en lugar de crear un enlace simbólico.

Establece la ruta a su directorio, donde reside libmysqlclient.18.dylib, a la variable de entorno DYLD_LIBRARY_PATH. Lo que hice es poner la siguiente línea en mi .bash_profile:

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

Eso es.

En mi caso, estaba recibiendo el error con Mac OS X 10.9 Mavericks. Instalé MySQL Community Server directamente desde el sitio web de Oracle / MySQL de DMG.

Todo lo que tenía que hacer era vincular los archivos lib al directorio / usr / local / lib.

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

Bono: si también está ejecutando Mac OS X, hay una gran herramienta para encontrar archivos como el archivo libmysqlclient.18.dylib, http://apps.tempel.org/FindAnyFile . Así es como originalmente encontré la ubicación del archivo dylib.

Descubrí que poner esto en su .profile o .bashrc (cualquiera que sea su uso) es la forma más fácil de hacerlo, los enlaces simbólicos son complicados en comparación con mantener rutas en sus archivos de origen.

También en comparación con la respuesta de yoshisurfs, la mayoría de las veces, cuando mysql se instala, el directorio mysql debe cambiar su nombre a mysql, no a todo el nombre de archivo, para facilitar su uso.

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

En el complemento pydev eclipse, es posible que desee establecer la variable de entorno para DYLD. La ruta se puede establecer como se muestra en

Instalar mysqldb en leopardo de las nieves

Para aquellos que usan Homebrew, podrías arreglar esto con:

 $ brew link mysql 

Me he encontrado con un par de entornos virtuales.

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

Trabajó en ambas ocasiones.

cuando esté en El Capitán, obtendrá un error: ln: /usr/lib/libmysqlclient.18.dylib: Operation not permitted debe cerrar la “Protección de integridad del sistema”.

Primero, reinicie y mantenga presionado cmd + R para ingresar al modo Recuperación, luego inicie el terminal y escriba el comando: csrutil disable , ahora puede reiniciar e intentar nuevamente.

En la nueva instalación de El Capitan, donde SIP (rootless impide el acceso a usr / lib /) está activado de forma predeterminada y no puede crear el enlace simbólico a menos que esté en modo de recuperación. Como @yannisxu dijo que puede deshabilitar SIP y hacer su enlace simbólico a / usr / lib / local y esto funcionará.

puede usar el siguiente comando en MAC OSX El Capitan en lugar de desactivar SIP:

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

Solía ​​haber una opción donde puede iniciar sesión como root y esto puede deshabilitar SIP, pero en la versión final que ahora está obsoleta, puede leer más sobre esto aquí: https://forums.developer.apple.com/thread/4686

Pregunta:

Hay un comando nvram boot-args disponible en Developer Beta 1 que puede deshabilitar el SIP cuando se ejecuta con privilegios de root:

 nvram boot-args="rootless=0" 

¿Esta opción de deshabilitar SIP también estará disponible en la versión de lanzamiento de El Capitán? ¿O es esto estrictamente para las versiones de desarrollador?

Responder:

Este comando nvram boot-args se irá. No estará disponible en la versión de lanzamiento de El Capitán y puede desaparecer antes del final de las versiones beta del desarrollador. Mantenga un ojo en las notas de lanzamiento para futuras Betas de desarrollador.

En mi caso, en El Capitán (OSX 10.11), tengo que hacer lo siguiente en ~/.bash_profile

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

Tuve este problema y me llevó un tiempo descubrir cómo solucionarlo.

Mi caso es ligeramente diferente. Mi servidor MySQL es de la versión 5.1.x. Y de alguna manera actualicé mi MySQL-python de 1.2.3 a 1.2.5. Y seguí recibiendo este problema desde entonces. Agregué el siguiente enlace.

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

Resulta que para MySQL 5.1.x no hay libmysqlclient.18.dylib, sino solo libmysqlclient.16.dylib. Puede solucionar este problema degradando MySQL-python a 1.2.3 o actualizando su servidor MySQL a 5.6.x (no he probado 5.5.x.)

Bajé la biblioteca a 1.2.3 ya que actualizar MySQL no es una opción para mí.

vaya a http://dev.mysql.com/downloads/connector/c/ y descargue MySQL Connector / C. después de obtener el paquete, cree un nuevo directorio ‘mysql’, descomprima el archivo Mysql Connector en el directorio mysql, luego en mysql, haga otro directorio vacío ‘build’. usaremos ‘build’ para comstackr MySQL Connector / C. cd build && cmake ../your-MySQL-Connector-source-dir make && make install después de make install, obtendrá un directorio llamado mysql en / usr / local. contiene todos los encabezados y librerías que necesita. Vaya a este directorio y copie los encabezados y libretas en las ubicaciones correspondientes.

puedes probar:

 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`