¿Cómo instalar MySQLdb (biblioteca de acceso a datos de Python en MySQL) en Mac OS X?

99

Soy un novato en Python, pero acabo de pasar un día trabajando en cómo hacer que MySQLdb funcione correctamente, y el universo según Google incluye numerosas referencias a lo que es un PITA, y una cantidad desmesurada de guías que parecen ser anticuado. Dado que este sitio está destinado a abordar este tipo de problemas, y sé que voy a necesitar una referencia a la solución en el futuro, voy a hacer la pregunta, dar mi respuesta y ver qué más flota en el superficie.

Entonces, la pregunta es ¿cómo hacer que MySQLdb funcione en Mac OS X?

mblackwell8
fuente

Respuestas:

133

Actualización para aquellos que usan Python3: simplemente puede usar conda install mysqlclientpara instalar las bibliotecas necesarias para usar MySQLdb tal como existe actualmente. La siguiente pregunta SO fue una pista útil: Python 3 ImportError: Ningún módulo llamado 'ConfigParser' . La instalación de mysqlclient instalará mysqlclient, mysql-connector y llvmdev (al menos, instaló estas 3 bibliotecas en mi máquina).

Aquí está la historia de mi experiencia incoherente con este problema. Me encantaría verlo editado o generalizado si tiene una mejor experiencia con el problema ... aplique un poco de esa TAN mágica.

Nota: Los comentarios del párrafo siguiente se aplicaron a Snow Leopard, pero no a Lion, que parece requerir MySQL de 64 bits.

En primer lugar, el autor (¿todavía?) De MySQLdb dice aquí que uno de los problemas más perniciosos es que OS X viene instalado con una versión de 32 bits de Python, pero la mayoría de los usuarios promedio (incluido yo mismo) probablemente salte para instalar la versión de 64 bits. de MySQL. Mal movimiento ... elimine la versión de 64 bits si la ha instalado (las instrucciones sobre esta tarea complicada están disponibles en SO aquí ), luego descargue e instale la versión de 32 bits (paquete aquí )

Existen numerosos pasos a seguir sobre cómo crear e instalar las bibliotecas MySQLdb. A menudo tienen diferencias sutiles. Este me pareció el más popular y proporcionó la solución de trabajo. Lo he reproducido con un par de ediciones a continuación.

Paso 0: antes de comenzar, supongo que tiene MySQL, Python y GCC instalados en Mac.

Paso 1: Descargue el último adaptador MySQL para Python de SourceForge.

Paso 2: extraiga su paquete descargado:

tar xzvf MySQL-python-1.2.2.tar.gz

Paso 3: Dentro de la carpeta, limpia el paquete:

sudo python setup.py clean

PAREJA DE PASOS EXTRA, (de este comentario )

Paso 3b: elimine todo lo que esté en su directorio MySQL-python-1.2.2 / build / * - no confíe en "python setup.py clean" para que lo haga por usted

Paso 3c: Retire el huevo debajo de Users / $ USER / .python-eggs

Paso 4: Originalmente requería editar _mysql.c, pero ahora YA NO ES NECESARIO. La comunidad MySQLdb parece haber solucionado este error ahora.

Paso 5: Cree un enlace simbólico en lib para apuntar a un subdirectorio llamado mysql. Aquí es donde busca durante la compilación.

sudo ln -s /usr/local/mysql/lib /usr/local/mysql/lib/mysql

Paso 6: Edite setup_posix.py y cambie lo siguiente

mysql_config.path = "mysql_config"

a

mysql_config.path = "/ usr / local / mysql / bin / mysql_config"

Paso 7: En el mismo directorio, reconstruya su paquete (ignore las advertencias que lo acompañan)

sudo python setup.py build

Paso 8: Instale el paquete y listo.

sudo python setup.py install

Paso 9: prueba si está funcionando. Funciona si puede importar MySQLdb.

python

>>> import MySQLdb

Paso 10: Si al intentar importar, recibe un error quejándose de que Library not loaded: libmysqlclient.18.dylibtermina en: Reason: image not foundnecesita crear un enlace simbólico adicional que es:

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

Entonces debería poder hacerlo import MySQLdbsin errores.

Sin embargo, un inconveniente final es que si inicia Python desde el directorio de compilación, obtendrá este error:

/Library/Python/2.5/site-packages/MySQL_python-1.2.3c1-py2.5-macosx-10.5-i386.egg/_mysql.py:3: UserWarning: El módulo _mysql ya se importó desde /Library/Python/2.5/ site-packages / MySQL_python-1.2.3c1-py2.5-macosx-10.5-i386.egg / _mysql.pyc, pero XXXX / MySQL-python-1.2.3c1 se está agregando a sys.path

Esto es bastante fácil para Google, pero para evitarle problemas, terminará aquí (o tal vez no ... no es una URL particularmente cd ..preparada para el futuro) y se dará cuenta de que necesita salir del directorio de compilación y el error debería desaparecer.

Como escribí en la parte superior, me encantaría ver esta respuesta generalizada, ya que existen muchas otras experiencias específicas de este horrible problema. Edite o proporcione su propia respuesta mejor.

mblackwell8
fuente
1
Tenga en cuenta que el Python proporcionado por Apple en 10.6 (Snow Leopard) prefiere ejecutar 64 bits (es universal de 32 bits / 64 bits). También hay otras trampas. Durante un tiempo, en la serie mysql 5.1.x, los tarballs de OS X empaquetados por mysql eran defectuosos (se decía que eran universales pero no lo eran). El adaptador de base de datos para Python, MySQLdb, ha tenido sus propios problemas. Este es un caso en el que le recomendamos que utilice MacPorts para crear todo lo que necesita automáticamente. Es demasiado fácil que algo salga mal.
Ned Deily
Dejaré esto aquí en caso de que ayude a alguien más. También tuve que modificar site.cfg para configurar mysql_config en la ruta correcta. No creo que tuviera una ruta inicialmente, por lo que estaba predeterminado en / opt / ..., pero necesitaba apuntar a / usr / local / mysql / ...
tchaymore
8
También tuve que correr:sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib
David Underhill
1
También estoy usando Lion y tuve grandes problemas para que esto funcionara. Finalmente encontré esta gran pregunta y respuesta SO y la seguí al 100%. No funcionó para mí hasta que he añadido, tal y como se ha indicado anteriormente, David Underhill: sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib. Una vez que ejecuté esto, se importó como se esperaba ... finalmente. Wheewwww. Solo un comentario para aquellos en una posición similar.
Juan el Rey
2
Resulta que tenía bibliotecas mysql pero no las vinculaba correctamente. Mac OS ElCapitan no permite la vinculación a / usr / lib. Así que esto fue suficiente para mí: sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/local/lib/libmysqlclient.18.dylib
Maruthi
101

Una forma rápida y sencilla para Mac OS X 10.8 (Mountain Lion), 10.9 (Mavericks), 10.10 (Yosemite) y 10.11 (El Capitan):

Supongo que tiene XCode, sus herramientas de línea de comandos , Python y MySQL instalados.

  1. Instalar PIP:

    sudo easy_install pip
  2. Editar ~ / .profile: (puede que no sea necesario en Mac OS X 10.10)

    nano ~/.profile

    Copie y pegue las siguientes dos líneas

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

    Guardar y Salir. Las palabras posteriores ejecutan el siguiente comando:

    source  ~/.profile
  3. Instalar MySQLdb

    sudo pip install MySQL-python

    Para probar si todo funciona bien, intenta

    python -c "import MySQLdb"

Funcionó de maravilla para mí. Espero que ayude.

Si encuentra un error con respecto a una biblioteca faltante: Biblioteca no cargada: libmysqlclient.18.dylib, entonces debe vincularlo simbólicamente para que le /usr/libguste:

sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib 
F Lekschas
fuente
2
Gracias, esta solución también funciona en Mac OSX 10.9 :-)
matsoftware
2
Esto funcionó muy bien para mí (beta pública de Yosemite; Mysql 5; Py2.7), pero necesitaba hacer el sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylibcomando desde abajo.
Michael Scott Cuthbert
Buena respuesta. Ya tenía otras definiciones de DYLD_LIBRARY_PATH en mi .bash_profile, así que lo agregué de esta maneraexport DYLD_LIBRARY_PATH=$DYLD_LIBRARY_PATH:/usr/local/mysql/lib/
beroe
1
Acabo de verificar que esto funciona con 10.10.4. Además, al usar mysql de homebrew, el cambio de .profile no fue necesario para que esto funcione.
Isotopp
1
Después de instalar MySQL con brew install mysql, no tuve que pasar por el segundo paso.
dav.garcia
36

Instale mysql y python a través de Macports Los porteros han hecho todo el trabajo difícil.

sudo port install py26-mysql 
sudo port install mysql5-server

debe instalar lo que necesita. (ver Stack overflow para comentarios sobre el servidor mysql )

Si solo necesita conectarse a mysql y no ejecutar un servidor, la primera línea es suficiente.

Macports ahora (principios de 2013) proporcionará descargas binarias para combinaciones comunes de SO y una arquitectura ejecutable, para otros (y si lo solicita) se compilará desde la fuente.

En general, los macports (o fink) ayudan cuando hay bibliotecas complejas, etc. que deben instalarse.

Python solo código y si se pueden configurar dependencias simples de C a través de herramientas de configuración, etc., pero comienza a volverse complejo si mezcla los dos.

mmmmmm
fuente
3
Tenga en cuenta que cuando comience a usar MacPorts, asegúrese de que su ruta prefiera / opt / local / bin sobre / usr / bin, ya que MacPorts instala cosas en / opt / local.
Teemu Kurppa
4
¡Si! Y omita la segunda línea si solo necesita conectarse a un servidor MySQL existente. Desafortunadamente, con la cantidad de dependencias involucradas, intentar usar python con mysql en OS X es un caso en el que es más fácil dejar que MacPorts instale una instancia adicional de python en lugar de intentar jugar al administrador de paquetes usted mismo.
Ned Deily
Como nota al margen, si recibe
Jay Taylor
4
Para su información, si solo hace la primera línea (con py27-mysql al menos), terminará instalando mysql5 de todos modos. Descargando y compilando la fuente. Probablemente no sea lo que quieres. Grr.
Ben Hardy
@BenHardy: se instala todo, que es lo que quieres y exactamente lo que quise decir, también ahora los ejecutables de Lion y Snow Leopard están construidos de forma centralizada por macports, por lo que no realizarán una compilación local en la mayoría de los casos.
mmmmmm
15

Instalar pip:

sudo easy_install pip

Instalar brebaje:

ruby -e "$(curl -fsSL https://raw.github.com/Homebrew/homebrew/go/install)"

Instale mysql:

brew install mysql

Instalar MySQLdb

sudo pip install MySQL-python

Si tiene problemas de compilación, intente editar el archivo ~ / .profile como en una de las respuestas aquí.

Ron Reiter
fuente
¡Gracias! Esto funcionó en Sierra [OSX 10.12.6 (16G29)].
Haránad
curl: (22) La URL solicitada devolvió el error: 404 No encontrado
Thirupathi Thangavel
hizo esto pero con en su pip install mysqlclientlugar. ¡Trabajos!
jeremysprofile
13

Aquí hay otro paso que tuve que seguir después de recibir un error al completar el Paso 9:

ImportError: dlopen(/Users/rick/.python-eggs/MySQL_python-1.2.3-py2.6-macosx-10.6-universal.egg-tmp/_mysql.so, 2): Library not loaded: libmysqlclient.18.dylib

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

Referencia: ¡Gracias! http://ageekstory.blogspot.com/2011_04_01_archive.html

Richard Boardman
fuente
4

Acabo de tener este problema (¡de nuevo!) Después de obtener una nueva caja Lion.

La mejor solución que he encontrado (todavía no es 100% óptima, pero funciona):

usted puede conseguirlo mediante la descarga de XCode / Herramientas de desarrollo de Apple - esto es una gran descarga -

... pero en cambio recomiendo este github que tiene lo que necesitas (y no tiene XCode): https://github.com/kennethreitz/osx-gcc-installer

Descargué su PKG prediseñado para lion, https://github.com/downloads/kennethreitz/osx-gcc-installer/GCC-10.7-v2.pkg

  • asegúrese de haber descargado una versión de 64 BIT de MYSQL Community. (La instalación de DMG es una ruta fácil) http://dev.mysql.com/downloads/mysql/

  • Establezca rutas de la siguiente manera:

    export PATH = $ PATH: / usr / local / mysql-XXXX

    exportar DYLD_LIBRARY_PATH = / usr / local / mysql / lib /

    exportar ARCHFLAGS = '- arch x86_64'

TENGA EN CUENTA QUE:

1 en mysql-XXXX anterior, XXX es la versión específica que descargó. (Probablemente / usr / local / mysql / también funcionaría, ya que lo más probable es que sea un alias del mismo, pero no pretendo conocer su configuración)

2 He visto que se sugirió que ARCHFLAGS se estableciera en '-arch i386 -arch x86_64', pero especificar solo x86_64 parecía funcionar mejor para mí. (Puedo pensar en algunas razones para esto, pero no son estrictamente relevantes).

  • ¡Instala la bestia!

    easy_install MySQL-python

  • ÚLTIMO PASO:

¡Agregue permanentemente el DYLD_LIBRARY_PATH!

Puede agregarlo a su bash_profile o similar. Este era el paso que faltaba para mí, sin el cual mi sistema seguía insistiendo en varios errores al encontrar _mysql.so y así sucesivamente.

exportar DYLD_LIBRARY_PATH = / usr / local / mysql / lib /

@ richard-boardman, acabo de notar su solución de enlace suave, que en efecto puede estar haciendo lo mismo que hace mi solución PATH ... amigos, lo que sea que funcione mejor para usted.

Mejor referencia: http://activeintelligence.org/blog/archive/mysql-python-aka-mysqldb-on-osx-lion/

jsh
fuente
4

Podría intentar usar el python puro pymysql:

sudo easy_install pymysql

(O utilícelo pipsi lo tiene instalado). Luego, agregue esto antes que usted import MySQLdben su código:

try:
    import pymysql
    pymysql.install_as_MySQLdb()
except ImportError:
    pass
Collin Anderson
fuente
3

O prueba simple:

> sudo easy_install MySQL-python

Si da un error como el siguiente:

EnvironmentError: mysql_config no encontrado

, luego ejecuta esto

> export PATH=$PATH:/usr/local/mysql/bin
Shashank Agarwal
fuente
0

Si está utilizando MySQL de 64 bits, utilizar ARCHFLAGS para especificar la arquitectura de su CPU mientras crea bibliotecas mysql-python funcionaría:

ARCHFLAGS='-arch x86_64' python setup.py build
ARCHFLAGS='-arch x86_64' python setup.py install
Shan Valleru
fuente
0
export PATH=$PATH:/usr/local/mysql/bin/

debería solucionar el problema ya que el sistema no puede encontrar el archivo mysql_config.

Varun Bhatia
fuente
0

En macos Sierra, esto funciona para mí, donde python es administrado por anaconda:

anaconda search -t conda mysql-python

anaconda show CEFCA/mysql-python

conda install --channel https://conda.anaconda.org/CEFCA mysql-python

Para usar con SQLAlchemy:

Python 2.7.13 | Continuum Analytics, Inc. | (predeterminado, 20 de diciembre de 2016, 23:05:08) [GCC 4.2.1 Compatible con Apple LLVM 6.0 (clang-600.0.57)] en darwin Escriba "ayuda", "derechos de autor", "créditos" o "licencia" para obtener más información. Continuum Analytics le ofrece Anaconda. Consulte: http://continuum.io/thanks y https://anaconda.org

>>> de importación sqlalchemy *

>>> dbengine = create_engine ('mysql: // ....')

sAguinaga
fuente
0

Esta respuesta es una actualización, alrededor de noviembre de 2019. Ninguna de las instalaciones populares de pip le brindará una configuración funcional en MacOS 10.13 (y probablemente también en otras versiones). Aquí hay una forma sencilla de hacer que las cosas funcionen:

brew install mysql
pip install mysqlclient

Si necesita ayuda para instalar brew, consulte este sitio: https://brew.sh/

come comida
fuente
0

Me encontré con este problema y descubrí que mysqlclientnecesita saber dónde encontrar openssl, y OSX lo oculta de forma predeterminada.

Busque openssl con brew info openssl, y luego agregue la ruta a su opensslcontenedor a su RUTA:

export PATH="/usr/local/opt/openssl/bin:$PATH"

Recomiendo agregar eso a su .zshrc o .bashrc para que no tenga que preocuparse por eso en el futuro. Luego, con esa variable exportada (que puede significar cerrar y volver a abrir su sesión de bash), agregue dos variables env más:

# in terminal
export LDFLAGS="-L/usr/local/opt/openssl/lib"
export CPPFLAGS="-I/usr/local/opt/openssl/include"

Luego, finalmente, ejecuta:

pipenv install mysqlclient

y debería instalarse bien.

Fuente: https://medium.com/@shandou/pipenv-install-mysqlclient-on-macosx-7c253b0112f2

Planta de Elliot
fuente