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 MD5c79ee91af08057dfc269ee212915801a
y tiene un tamaño de 1,462,376 bytes. ¿Cómo se ve tu copia?