Error de architecture mal de Python MySQL

He estado en esto por algún tiempo y leí muchos sitios sobre el tema. Sospecho que tengo basura mintiendo acerca de causar este problema. ¿Pero donde?

Este es el error al importar MySQLdb en python:

>>> import MySQLdb /Library/Python/2.6/site-packages/MySQL_python-1.2.3c1-py2.6-macosx-10.6-universal.egg/_mysql.py:3: UserWarning: Module _mysql was already imported from /Library/Python/2.6/site-packages/MySQL_python-1.2.3c1-py2.6-macosx-10.6-universal.egg/_mysql.pyc, but /Users/phoebebr/Downloads/MySQL-python-1.2.3c1 is being added to sys.path Traceback (most recent call last): File "", line 1, in  File "MySQLdb/__init__.py", line 19, in  import _mysql File "build/bdist.macosx-10.6-universal/egg/_mysql.py", line 7, in  File "build/bdist.macosx-10.6-universal/egg/_mysql.py", line 6, in __bootstrap__ ImportError: dlopen(/Users/phoebebr/.python-eggs/MySQL_python-1.2.3c1-py2.6-macosx-10.6-universal.egg-tmp/_mysql.so, 2): no suitable image found. Did find: /Users/phoebebr/.python-eggs/MySQL_python-1.2.3c1-py2.6-macosx-10.6-universal.egg-tmp/_mysql.so: mach-o, but wrong architecture 

Estoy tratando de 64 bits, así que compruebe aquí:

 file $(which python) /usr/bin/python: Mach-O universal binary with 3 architectures /usr/bin/python (for architecture x86_64): Mach-O 64-bit executable x86_64 /usr/bin/python (for architecture i386): Mach-O executable i386 /usr/bin/python (for architecture ppc7400): Mach-O executable ppc file $(which mysql) /usr/local/mysql/bin/mysql: Mach-O 64-bit executable x86_64 

He configurado mi versión por defecto de python a 2.6

 python Python 2.6.1 (r261:67515, Feb 11 2010, 00:51:29) [GCC 4.2.1 (Apple Inc. build 5646)] on darwin 

Se intentó eliminar el directorio de comstackción y setup.py de python. Se limpian los nombres de Python / 2.5 / package renombrados, por lo que no se pudo intentar recoger eso.

ACTUALIZAR

Borré todo y seguí las instrucciones aquí: Django + MySQL en Mac OS 10.6.2 Snow Leopard instalando usando macports.

Pero básicamente sigue teniendo el mismo error.

 Traceback (most recent call last): File "", line 1, in  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/MySQLdb/__init__.py", line 19, in  import _mysql ImportError: dlopen(/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/_mysql.so, 2): no suitable image found. Did find: /opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/_mysql.so: mach-o, but wrong architecture >>> 

Cuando el intérprete dice es:

Ha instalado MySQL_python-1.2.3c1 en /Library/Python/2.6/site-packages pero está agregando a sys.path otra versión en / users / phoebebr / Downloads. Cuando bash importar MySQLdb desde el segundo directorio, he encontrado que _mysql.so es de otra architecture.

SO, parece que terminaste con la versión incorrecta de MySQLdb. Elimine /Users/phoebebr/.python-eggs/MySQL_python-1.2.3c1-py2.6-macosx-10.6-universal.egg-tmp y /Users/phoebebr/Downloads/MySQL-python-1.2.3c1. Pruebe de nuevo para ver si la versión en / library funciona. Si no, descargue el binario para MacOS. En última instancia, descargue la fuente de MySQL-python y compílela.

Tengo una MacBook Air nueva y logré que MySQLdb funcionara haciendo lo siguiente: (Snow Leopard 10.6.6, Python preinstalado)

 uname -a Darwin Braindamage.local 10.6.0 Darwin Kernel Version 10.6.0: Wed Nov 10 18:13:17 PST 2010; root:xnu-1504.9.26~3/RELEASE_I386 i386 

Descargue el archivo dmg MySQL de 32 bits de las páginas mysql, instálelo.

Agregue las siguientes líneas a su ~ / .profile (o ~ / .bash_profile):

 PATH="/usr/local/mysql/bin:${PATH}" export PATH export DYLD_LIBRARY_PATH=/usr/local/mysql/lib/ export VERSIONER_PYTHON_PREFER_64_BIT=no export VERSIONER_PYTHON_PREFER_32_BIT=yes 

Después de guardar, escriba lo siguiente en el terminal: source ~ / .profile

Descargue MySQL-python-1.2.3.tar.gz descomprimir, descomprimir, cd a ese directorio

 python2.5 setup.py build sudo python2.5 setup.py install 

salir de ese directorio (o aparecerá una advertencia)

 python2.5 import MySQLdb 

o

 python import MySQLdb 

¡Funciona como debe!

Simplemente luché con lo mismo, a pesar de las muchas respuestas, así que me arriesgo a agregar otra:

  • Ejecutar python -c 'import platform; print platform.platform()' python -c 'import platform; print platform.platform()' . ¿Termina en “64 bit”?
  • Haz ls -l /usr/local/mysql . Es un enlace simbólico: ¿termina en “x86_64”?

Si Python dice “64 bits”, entonces quieres mysql para “x86_64” (busca eso en http://dev.mysql.com/downloads/mysql/ ). Si Python dice “32 bits”, entonces es probable que desee el mysql “x86”. Si tiene una coincidencia, pero aún no funciona, lea las otras respuestas (sobre VERSIONER_PYTHON_PREFER_32_BIT, etc.)

Para mí, la falta de coincidencia provocó el error "mach-o, but wrong architecture" . El siguiente error fue "Library not loaded: libmysqlclient.18.dylib... Reason: image not found" .

Para resolver esto, recomiendo agregar un enlace simbólico (en lugar de establecer DYLD_LIBRARY_PATH, como se explica en otras respuestas):

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

Esto se debe a que su Python es de 32 bits, pero de alguna manera, la biblioteca MySQL instalada es de 64 bits. Para resolver el problema, aquí puede instalarlo manualmente con los siguientes comandos:

 wget http://downloads.sourceforge.net/project/mysql-python/mysql-python/1.2.3/MySQL-python-1.2.3.tar.gz tar xvf MySQL-python-1.2.3.tar.gz cd MySQL-python-1.2.3 ARCHFLAGS="-arch i386" python setup.py install 

Con ARCHFLAGS = “- arch i386”, debe comstackrse como architecture i386.

Esta es una foto en la oscuridad, no estoy familiarizada con MACOSX, pero vi un problema similar en Linux y solo pude resolverlo mediante:

  1. Desinstalar todos los componentes de MySQLdb a través del administrador de paquetes
  2. Realice una búsqueda de bajo nivel para ubicar los directorios y archivos restantes relacionados con MySQLdb. Si instaló / construyó MySQLdb en forma manual, es probable que encuentre algunas referencias a él en algún lugar, pero probablemente en el directorio de paquetes de sitios. enfoque recomendado basado en la investigación que hice

Luego traté de importar MySQLdb y me aseguré de que recibía un simple error de que el paquete no existía. Al menos sabía que MySQLdb se había eliminado al 100%.

Luego, realizo una instalación limpia a través del administrador de paquetes si esa opción existe, ya que será 100% compatible con su plataforma y librerías. Comstackr, etc. es genial, pero tienes que hacer un montón de trabajo para asegurarte de que tienes las librerías de clientes MySQL correctas, etc. para vincular (según mi dolorosa experiencia)

Buena suerte.

En el peor de los casos … podría usar la opción Pythy Pure Python alternativa ( http://pypi.python.org/pypi/PyMySQL/0.2 ) pero debo confesar que la mayoría de las personas recomiendan MySQLdb

Parece que este problema está relacionado con la versión de mysql que tienes en la caja. Al comstackr el componente mysql de python, usa mysql_config, que normalmente reside en / usr / local / mysql / bin para determinar qué indicadores pasar a CC al comstackr el componente mysql. Si tienes una versión de mysql de 32 bits en ejecución, obtendrás una versión de 32 componentes de este componente, incluso si tienes la versión de python de 64 bits. Como ejemplo tuve la siguiente versión de mysql …

/usr/local/mysql-5.5.16-osx10.6-x86 y debería haber estado ejecutando … /usr/local/mysql-5.5.16-osx10.6-x86_64

Cambiando a la versión de 64 bits de mysql en mi máquina y luego ejecutando … sudo pip install mysql-python

arreglado el problema para mi Puede ejecutar el siguiente comando para verificar cómo construirá el componente mysql …

/ usr / local / mysql / bin / mysql_config –cflags

Debería ver algo como esto…

-I / usr / local / mysql / include -Os -g -fno-common -fno-strict-aliasing -arch x86_64

Tengo otra solución posible para agregar.

.profile el problema agregando la siguiente línea a .profile ( .bash_profile está bien si es una máquina de desarrollo):

 export VERSIONER_PYTHON_PREFER_64_BIT=yes export VERSIONER_PYTHON_PREFER_32_BIT=no 

(Sin embargo, la segunda línea podría no ser necesaria. Pero después de horas de tocar el violín, intentarlo y volver a comstackr, ya no podía molestarme en probar esto).

Este problema se resolvió para mí seleccionando la versión de python correcta. Si instaló con macports:

 sudo port select python python26 

Me encontré con el mismo problema.

IMPORTANTE:
elimine todo el _mysql.so en el directorio MySQL-python-1.2.3 (esto es lo que descarga) o simplemente elimine todo el directorio y vuelva a generarlo desde el archivo tar. Luego construir e instalar de nuevo. Entonces _mysql.so será de 64 bits. Ahora puedes importarlo. Si ve dyld: Library not loaded , exporte DYLD_LIBRARY_PATH=/usr/local/mysql/lib

Tuve el mismo problema con MySQLdb en Mac OS X y Ubuntu, así que cambié al MysQL Python Connector oficial: (disponible en PyPI):

 sudo pip install mysql-connector-python 

o descargando desde: http://dev.mysql.com/downloads/connector/python/

Documentación: http://dev.mysql.com/doc/refman/5.5/en/connector-python.html

Es fácil de usar y también es compatible con PEP 249 (Python DB API versión 2.0).

Nota adicional para aclarar el problema:

El mensaje de error es:

 ImportError: dlopen(/Users/phoebebr/.python-eggs/MySQL_python-1.2.3c1-py2.6-macosx-10.6-universal.egg-tmp/_mysql.so, 2): no suitable image found. Did find: /Users/phoebebr/.python-eggs/MySQL_python-1.2.3c1-py2.6-macosx-10.6-universal.egg-tmp/_mysql.so: mach-o, but wrong architecture 

El error de architecture mach-o, pero incorrecto significa que python y _mysql.so tienen una architecture diferente (binario de 32 bits / 64 bits). Podemos comprobarlo por:

 file $(which python) file /Users/phoebebr/.python-eggs/MySQL_python-1.2.3c1-py2.6-macosx-10.6-universal.egg-tmp/_mysql.so 

Y si no coinciden, deberíamos hacerlos coincidir. Para mí, mi _mysql.so es de 32 bits (por casualidad instalé el mysql de 32 bits), y mi python2.7 se ejecuta en 64 bits de forma predeterminada. Forzo Python se ejecuta en 32 bits por:

 export VERSIONER_PYTHON_PREFER_32_BIT=yes 

Y el problema resuelto.

python 2.6+ puede ejecutarse en modo de 64 o 32 bits, verifique ¿Cómo puedo determinar si mi shell de python se está ejecutando en modo de 32 bits o de 64 bits en OS X?

Tuve el mismo problema con mi Mac ElCaptain y resolví el problema siguiendo esta otra publicación . Solo usa brew y tu problema está resuelto.