sql >> Base de Datos >  >> RDS >> Mysql

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

Actualización para aquellos que usan Python3: Simplemente puede usar conda install mysqlclient para 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 incoherente experiencia con este problema. Me encantaría verlo editado o generalizado si tienes una mejor experiencia en el tema... aplica un poco de esa magia SO.

Nota:los comentarios del siguiente párrafo se aplican 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 Python de 32 bits, pero la mayoría de los usuarios promedio (incluido yo mismo) probablemente opten por instalar la versión de MySQL de 64 bits. Mal movimiento... elimine la versión de 64 bits si la ha instalado (las instrucciones sobre esta complicada tarea están disponibles en SO aquí ), luego descargue e instale la versión de 32 bits (paquete aquí )

Hay numerosos pasos paso a paso sobre cómo compilar e instalar las bibliotecas MySQLdb. A menudo tienen diferencias sutiles. Esto 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 instalado en el mac.

Paso 1: Descargue el último adaptador de 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

UN PAR DE PASOS ADICIONALES, (de este comentario )

Paso 3b: Elimine todo 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 Usuarios/$USUARIO/.python-eggs

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

Paso 5: Cree un enlace simbólico bajo 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.ruta ="mysql_config"

a

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

Paso 7: En el mismo directorio, reconstruya su paquete (ignore las advertencias que vienen con él)

sudo python setup.py build

Paso 8: Instala el paquete y listo.

sudo python setup.py install

Paso 9: Prueba si está funcionando. Funciona si puedes importar MySQLdb.

python

>>> import MySQLdb

Paso 10: Si al intentar importar recibe un error quejándose de que Library not loaded: libmysqlclient.18.dylib terminando en:Reason: image not found necesita 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 import MySQLdb sin errores.

Sin embargo, un problema 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:Advertencia para el usuario:el módulo _mysql ya se importó de /Library/Python/2.5/ site-packages/MySQL_python-1.2.3c1-py2.5-macosx-10.5-i386.egg/_mysql.pyc, pero se agrega XXXX/MySQL-python-1.2.3c1 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 preparada para el futuro) y descubra que necesita cd .. fuera 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. Edítelo o proporcione su propia mejor respuesta.