python mysql macos osx-snow-leopard

Python: MySQLdb y "Biblioteca no cargada: libmysqlclient.16.dylib"



macos osx-snow-leopard (6)

Después de easy_install, creo un enlace suave que resolvió el problema

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

La puesta en marcha...

Intentando configurar una instalación limpia de Mac os X 10.6 para desarrollar python / django y no recuerdo haber topado con esto en 10.5.

Después de instalar MySQL desde el instalador en mysql-5.5.8-osx10.6-x86_64.dmg , ejecuté

$ sudo pip install MySQL-python

y parecía ir sin problemas (salida a continuación)

Downloading/unpacking MySQL-python Downloading MySQL-python-1.2.3.tar.gz (70Kb): 70Kb downloaded Running setup.py egg_info for package MySQL-python warning: no files found matching ''MANIFEST'' warning: no files found matching ''ChangeLog'' warning: no files found matching ''GPL'' Installing collected packages: MySQL-python Running setup.py install for MySQL-python building ''_mysql'' extension gcc-4.2 -fno-strict-aliasing -fno-common -dynamic -DNDEBUG -g -fwrapv -Os -Wall -Wstrict-prototypes -DENABLE_DTRACE -pipe -Dversion_info=(1,2,3,''final'',0) -D__version__=1.2.3 -I/usr/local/mysql/include -I/System/Library/Frameworks/Python.framework/Versions/2.6/include/python2.6 -c _mysql.c -o build/temp.macosx-10.6-universal-2.6/_mysql.o -Os -g -fno-common -fno-strict-aliasing -arch x86_64 In file included from _mysql.c:36: /usr/local/mysql/include/my_config.h:325:1: warning: "SIZEOF_SIZE_T" redefined In file included from /System/Library/Frameworks/Python.framework/Versions/2.6/include/python2.6/Python.h:9, from pymemcompat.h:10, from _mysql.c:29: /System/Library/Frameworks/Python.framework/Versions/2.6/include/python2.6/pymacconfig.h:33:1: warning: this is the location of the previous definition In file included from _mysql.c:36: /usr/local/mysql/include/my_config.h:419:1: warning: "HAVE_WCSCOLL" redefined In file included from /System/Library/Frameworks/Python.framework/Versions/2.6/include/python2.6/Python.h:8, from pymemcompat.h:10, from _mysql.c:29: /System/Library/Frameworks/Python.framework/Versions/2.6/include/python2.6/pyconfig.h:803:1: warning: this is the location of the previous definition gcc-4.2 -Wl,-F. -bundle -undefined dynamic_lookup build/temp.macosx-10.6-universal-2.6/_mysql.o -L/usr/local/mysql/lib -lmysqlclient_r -lpthread -o build/lib.macosx-10.6-universal-2.6/_mysql.so -arch x86_64 warning: no files found matching ''MANIFEST'' warning: no files found matching ''ChangeLog'' warning: no files found matching ''GPL'' Successfully installed MySQL-python Cleaning up...

después de esto intenté:

$ python -c "import MySQLdb"

y me criticó con:

Traceback (most recent call last): File "<string>", line 1, in <module> File "/Library/Python/2.6/site-packages/MySQLdb/__init__.py", line 19, in <module> import _mysql ImportError: dlopen(/Library/Python/2.6/site-packages/_mysql.so, 2): Library not loaded: libmysqlclient.16.dylib Referenced from: /Library/Python/2.6/site-packages/_mysql.so Reason: image not found

Así que a mi pregunta ...

¿Qué hice mal? / ¿Qué más debo hacer?

Google (y buscando aquí) para esto devuelve una gran cantidad de resultados obteniendo este mensaje de error con Ruby no demasiados con Python.


En la última versión de MySQL 5.7.9 no es compatible con MySQL-python y usé la biblioteca PyMySQL lugar. También agregué en manage.py (en el proyecto Django) estas líneas para emular API de MySQL-python:

try: # load MySQLdb interface emulation import pymysql pymysql.install_as_MySQLdb() except ImportError: pass


En mi configuración (mysql 5.7.x de brew, pyenv), tenía un archivo lib más nuevo libmysqlclient.20.dylib . Lo que funcionó fue pip uninstall MySQL-python y pip install MySQL-python .


Simplemente configure DYLD_LIBRARY_PATH después de ejecutar pip install o easy_install :

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

Debería hacer el trabajo asumiendo que la instalación de MySQL está en /usr/local/mysql .


También puede aparecer si su cliente MySQL es más nuevo que su paquete MySQL-python. En mi caso, tenía un libmysqlclient_r.18.dylib en mi máquina, pero no un libmysqlclient_r.16.dylib. Ejecutando pip search mysql revelado

MySQL-python - Interfaz de Python con MySQL INSTALADO: 1.2.3 ÚLTIMO: 1.2.3c1

y ejecutar pip install --upgrade MySQL-python solucionó mi problema.


_mysql.so refiere a libmysqlclient.16.dylib . Es decir, la biblioteca compartida que sirve de puente entre Python y la biblioteca de cliente MySQL, _mysql.so , hace referencia a la biblioteca dinámica para la biblioteca de cliente MySQL, y esa biblioteca no se puede cargar por algún motivo.

Preguntas que debe responder:

  • ¿Hay un libmysqlclient.16.dylib algún lugar de tu sistema? Si no es así, debe instalar el software de cliente MySQL.
  • Si es así, ¿está el directorio que contiene esa biblioteca en su configuración DYLD_LIBRARY_PATH ? Si no, intente agregarlo.
  • De ser así, deberá asegurarse de que el archivo libmysqlclient.16.dylib no esté dañado. Mi copia, instalada en /opt/local/lib/mysql5/mysql/libmysqlclient.16.dylib , cortesía de MacPorts, tiene la firma MD5 c79ee91af08057dfc269ee212915801a y tiene un tamaño de 1,462,376 bytes. ¿Cómo se ve tu copia?