mysqldb mysqlclient python mysql-python

python - mysqlclient - pip mysql db



Python mysqldb: Biblioteca no cargada: libmysqlclient.18.dylib (14)

Descubrí 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 fue 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.

Acabo de compilar e instalar mysqldb para python 2.7 en mi mac os 10.6. Creé 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". Luego traté de ejecutar el siguiente código simple de 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()

Al ejecutarlo recibo el siguiente mensaje de error

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

¿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. Entonces necesito decirle a mi versión de Pydev Eclipse dónde encontrarlo. ¿Dónde puedo configurar esto?



En la nueva instalación de El Capitan, donde SIP (rootless impide el acceso a usr / lib /) está activado por defecto y no puede crear el enlace simbólico a menos que esté en modo de recuperación. Como @yannisxu dijo que puedes desactivar SIP y hacer tu 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 SIP cuando se ejecuta con privilegios de administrador:

nvram boot-args="rootless=0"

¿Esta opción de deshabilitar SIP también estará disponible en la versión de lanzamiento de El Capitan? ¿O esto es estrictamente para Developer Builds?

Responder:

Este comando nvram boot-args desaparecerá. No estará disponible en la versión de lanzamiento de El Capitan y puede desaparecer antes del final de Developer Betas. Esté atento a las notas de la versión para futuros Desarrolladores Betas.


En mi caso, en El Capitan (OSX 10.11), tengo que seguir en ~/.bash_profile

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


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

Todo lo que tenía que hacer era enlazar simbólicamente los archivos lib al directorio / usr / local / lib.

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

Bonificación: si también está ejecutando Mac OS X, existe 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.


Encontré poner esto en tu .profile o .bashrc (lo que sea que uses) es la manera más fácil de hacerlo, los enlaces de Sym son complicados en comparación con mantener rutas en tus archivos fuente.

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

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


Me encontré con esto con un par de entornos virtuales.

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

Trabajó ambas veces.


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

Primero, observe el resultado del error para ver dónde se encuentra el módulo python infractor:

ImportError: dlopen (/Library/Python/2.7/site-packages/_mysql.so, 2): Library not loaded: libmysqlclient.18.dylib Referenciado en: /Library/Python/2.7/site-packages/_mysql.so Motivo: imagen no encontrada

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

A continuación, descubra 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)

Por lo tanto, está buscando libmysqlclient.18.dylib sin información de ruta, arreglemos 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)


Para aquellos que usan homebrew, puedes arreglar esto con:

$ brew link mysql


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

La biblioteca real 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

para que tenga la siguiente asignación:

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, dado que MacOS El Capitan, System Integrity Protection (SIP, también conocido como "sin raíz") 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


Tuve este problema y tardé un tiempo en 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 evento agregué el siguiente enlace suave.

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 ya sea degradando su MySQL-python a 1.2.3 o actualizando su servidor MySQL a 5.6.x (no he intentado con 5.5.x.)

Bajé la categoría de la biblioteca a la 1.2.3 porque la actualización de MySQL no es una opción para mí.


cuando se encuentre en EI Capitan, obtendrá el 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 de Recuperación, luego inicie el terminal y escriba el comando: csrutil disable , ahora puede reiniciar y volver a intentarlo.


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`


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 ''compilación''. Usaremos ''compilación'' para compilar MySQL Connector / C. cd build && cmake ../your-MySQL-Connector-source-dir make && make install después de make install, obtendrás un directorio llamado mysql en / usr / local. contiene todos los encabezados y libs que necesita. vaya a este directorio y copie los encabezados y libs en las ubicaciones correspondientes.