mac - mysql python 3.6 connector windows 64 bit
MySQLdb de Python no puede encontrar libmysqlclient.dylib con MySQL de fabricaciĆ³n casera (4)
MySQL y Python instalados con Homebrew
Instalé MySQL y Python con Homebrew en OS X 10.10.5 Yosemite. My Python 2.7 está en python -> ../Cellar/python/2.7.9/bin/python
con un enlace simbólico a él en /usr/local/bin/python
.
En /usr/local/bin
hay un enlace simbólico:
mysql -> ../Cellar/mysql/5.7.9/bin/mysql
El error
En el shell de Python:
>>> import MySQLdb
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python2.7/site-packages/MySQLdb/__init__.py", line 19, in <module>
import _mysql
ImportError: dlopen(/usr/local/lib/python2.7/site-packages/_mysql.so, 2): Library not loaded: /usr/local/lib/libmysqlclient.18.dylib
Referenced from: /usr/local/lib/python2.7/site-packages/_mysql.so
Reason: image not found
Así que intenté:
$ sudo unlink /usr/local/lib/libmysqlclient.18.dylib
seguido por:
DYLD_LIBRARY_PATH=/usr/local/mysql/lib/:$DYLD_LIBRARY_PATH
y luego (desesperación por la razón):
$ export DYLD_LIBRARY_PATH=/usr/local/Cellar/mysql/5.7.9/lib
Pero en ambos casos, import MySQLdb
aún intentaba importar libmysqlclient.18.dylib
.
Entonces intenté:
$ pip install -U MySQL-python
y consiguió: Requirement already up-to-date: MySQL-python in /usr/local/lib/python2.7/site-packages
Respuestas existentes
Muchas answers a este problem en SO sugieren hacer manualmente un enlace simbólico explícito a la biblioteca con un número de versión (en mi caso libmysqlclient.20.dylib
). Sin embargo, esto parece crudo y no está preparado para el futuro, dados los enlaces simbólicos existentes:
en /usr/local/lib
hay
libmysqlclient.dylib -> ../Cellar/mysql/5.7.9/lib/libmysqlclient.dylib
y en /usr/local/Cellar/mysql/5.7.9/lib
encontramos:
libmysqlclient.20.dylib
con un enlace simbólico en el mismo directorio: libmysqlclient.dylib -> libmysqlclient.20.dylib
¿Cómo hacer que Python olvide libmysqlclient.18.dylib
?
Entonces, ¿cómo puedo hacer que Python olvide /usr/local/lib/libmysqlclient.18.dylib
y siga el enlace simbólico correcto en /usr/local/lib
a libmysqlclient.dylib
, sin agregar manualmente otro enlace simbólico?
Esto resolvió mi problema en mi caso:
$ pip uninstall MySQL-python
$ pip install mysqlclient
MySQL-python
resultó ser muy antiguo (el último compromiso fue hace 7 años). mysqlclient
es la versión moderna del mismo, con muchas mejoras y correcciones de errores.
Necesitas usar la versión dev de mysqlclient
:
pip install git+https://github.com/PyMySQL/mysqlclient-python.git@master
Antes tenía la última versión de PyPI (1.3.7) en Python 3.4 y buscaba libmysqlclient.18.dylib
(de MySQL 5.6) mientras que solo tenía libmysqlclient.20.dylib
(de MySQL 5.7).
Si usa Python 3, MySQL-python
no es una opción (y mysqlclient
es su versión más reciente).
Si encuentra un problema con la falta de libmysqlclient.18.dylib
:
descargue mysql 5.6 desde el enlace oficial: https://dev.mysql.com/downloads/mysql/
instalarlo
en la terminal -
mdfind libmysqlclient | grep .18.
mdfind libmysqlclient | grep .18.
copia la salida
sudo ln -s [the output from previous command] /usr/local/lib/libmysqlclient.18.dylib
También me encontré con este problema. Desinstalé MySQL-python y luego lo instalé.
pip uninstall MySQL-python
pip install MySQL-python
Actualización (basada en comentarios)
En algunos casos, es posible que deba realizar el segundo paso (instalar) de la siguiente manera:
pip install --no-binary MySQL-python MySQL-python
La opción no-binary
es para que pip la compile de nuevo y se vincule a la biblioteca correcta:
--no-binary <format_control>
No utilice paquetes binarios. Puede suministrarse varias veces, y cada vez se agrega al valor existente. Acepta: todos: para deshabilitar todos los paquetes binarios,: ninguno: para vaciar el conjunto, o uno o más nombres de paquetes con comas entre ellos. Tenga en cuenta que algunos paquetes son difíciles de compilar y pueden no instalarse cuando se usa esta opción en ellos.
NB: Tenga en cuenta que MySQL-python
debe mencionarse twice . Como se mencionó anteriormente, la primera aparición es el nombre del paquete al que se aplica la opción no-binary
, la segunda especifica el paquete que se debe instalar.