J'y travaille depuis un certain temps et j'ai lu de nombreux sites sur le sujet. soupçonne que j'ai junk mentir à propos de ce problème. Mais où?
C'est l'erreur quand j'importe 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 "<stdin>", line 1, in <module>
File "MySQLdb/__init__.py", line 19, in <module>
import _mysql
File "build/bdist.macosx-10.6-universal/Egg/_mysql.py", line 7, in <module>
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
J'essaie de 64 bits alors vérifié ici:
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
J'ai défini ma version par défaut de python sur 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
J'ai essayé de supprimer le répertoire de construction et le fichier setup.py clean de Python . Renommé Python/2.5/site-packages afin qu'il ne puisse pas essayer de le récupérer.
Tout supprimé et suivi les instructions ici: Django + MySQL sous Mac OS 10.6.2 Snow Leopard installation à l'aide de macports.
Mais fondamentalement, toujours la même erreur
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/MySQLdb/__init__.py", line 19, in <module>
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
>>>
Quand l'interprète dit est:
Vous avez installé MySQL_python-1.2.3c1 dans /Library/Python/2.6/site-packages Mais vous ajoutez à sys.path une autre version dans /users/phoebebr/Downloads.. Lorsque j'essaie pour importer MySQLdb à partir du deuxième répertoire, j'ai trouvé que _mysql.so provient d'une autre architecture.
SO, il semble que vous ayez fini avec la mauvaise version de MySQLdb. Supprimer /Users/phoebebr/.python-eggs/MySQL_python-1.2.3c1-py2.6-macosx-10.6-universal.Egg-tmp et /Users/phoebebr/Downloads/MySQL-python-1.2.3c1 . Testez à nouveau pour voir si la version Dans/library fonctionne. Sinon, téléchargez le binaire pour MacOS. En dernière instance, téléchargez La source de MySQL-python et compilez-la.
J'ai un MacBook Air frais et j'ai réussi à faire fonctionner MySQLdb en procédant comme suit: (Snow Leopard 10.6.6, Python préinstallé)
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
Téléchargez le fichier dmg MySQL 32 bits à partir de pages mysql, installez-le.
Ajoutez les lignes suivantes à votre ~/.profile (ou ~/.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
Après la sauvegarde, tapez ce qui suit dans le terminal: Source ~/.profile
Téléchargez le fichier MySQL-python-1.2.3.tar.gz unzip, untar, cd dans ce répertoire
python2.5 setup.py build
Sudo python2.5 setup.py install
quittez ce répertoire (ou vous recevrez un avertissement)
python2.5
import MySQLdb
ou
python
import MySQLdb
fonctionne comme il se doit !!
J'ai juste eu du mal avec la même chose, malgré les nombreuses réponses, alors je vais risquer d'en ajouter une autre:
python -c 'import platform; print platform.platform()'
. Est-ce que ça finit en "64 bit"?ls -l /usr/local/mysql
. C'est un lien symbolique: se termine-t-il par "x86_64"?Si python dit "64 bits", vous voulez alors mysql pour "x86_64" (recherchez-le à http://dev.mysql.com/downloads/mysql/ ). Si python dit "32 bits", alors vous voulez probablement le mysql "x86". Si vous avez une correspondance, mais que cela ne fonctionne toujours pas, lisez les autres réponses (à propos de VERSIONER_PYTHON_PREFER_32_BIT, etc.).
Pour moi, l'incompatibilité a causé l'erreur "mach-o, but wrong architecture"
. L'erreur suivante était "Library not loaded: libmysqlclient.18.dylib... Reason: image not found"
.
Pour résoudre ce problème, je vous recommande d'ajouter un lien symbolique (plutôt que de définir DYLD_LIBRARY_PATH, comme expliqué dans d'autres réponses):
Sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/local/lib/
Cela est dû au fait que votre Python est 32bits, mais que la bibliothèque MySQL installée est 64bits. Pour résoudre le problème, vous pouvez l'installer manuellement à l'aide des commandes suivantes:
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
Avec ARCHFLAGS = "- Arch i386", il devrait être compilé sous l’architecture i386.
Ceci est un coup dans le noir - pas familier avec MACOSX - mais j'ai vu un problème similaire sous Linux et ne pouvais le résoudre qu'en:
Ensuite, j'ai essayé d'importer MySQLdb et je me suis assuré que le paquet n'existait pas - au moins je savais que MySQLdb était supprimé à 100%
Ensuite, j'effectue une nouvelle installation via le gestionnaire de paquets si cette option existe car elle sera compatible à 100% avec votre plate-forme et vos bibliothèques. Compiler, etc. est une bonne chose, mais vous devez faire beaucoup de travail sur les jambes pour vous assurer que vous avez les bonnes bibliothèques clientes MySQL, etc. vers lesquelles vous connecter (en fonction de ma douloureuse expérience).
Bonne chance.
Dans le pire des cas ... vous pouvez utiliser l'option alternative python pure de PyMySQL ( http://pypi.python.org/pypi/PyMySQL/0.2 ) mais je dois avouer que la plupart des gens recommandent MySQLdb.
Il semble que ce problème soit lié à la version de mysql que vous avez sur la boîte. Lors de la compilation du composant mysql python, il utilise mysql_config, qui réside généralement dans/usr/local/mysql/bin pour déterminer les indicateurs à transmettre à CC lors de la compilation du composant mysql. Si vous avez une version 32 bits de mysql en cours d'exécution, vous obtiendrez une version 32 de ce composant, même si vous avez la version 64 bits de python. A titre d'exemple, j'ai eu la version suivante de mysql ...
/usr/local/mysql-5.5.16-osx10.6-x86 et j'aurais dû exécuter ... /usr/local/mysql-5.5.16-osx10.6-x86_64
Passer à la version 64 bits de mysql sur ma machine, puis exécuter ... Sudo pip installer mysql-python
résolu le problème pour moi. Vous pouvez exécuter la commande suivante pour vérifier comment il va construire le composant mysql ...
/ usr/local/mysql/bin/mysql_config --cflags
Vous devriez voir quelque chose comme ça ...
-I/usr/local/mysql/include -Os -g -fno-common -fno-strict-aliasing -Arch x86_64
J'ai une autre solution possible à ajouter.
J'ai résolu le problème en ajoutant la ligne suivante à .profile
(.bash_profile
est correct s'il s'agit d'une machine de développement):
export VERSIONER_PYTHON_PREFER_64_BIT=yes
export VERSIONER_PYTHON_PREFER_32_BIT=no
(2ème ligne peut-être pas nécessaire, cependant. Mais après des heures de bidouillage, d'essayer, de recompiler, je ne pouvais plus être dérangé d'essayer cela).
J'ai eu le même problème avec MySQLdb sous Mac OS X et Ubuntu. Je suis donc passé au connecteur officiel MysQL Python: (disponible sur PyPI):
Sudo pip install mysql-connector-python
ou par téléchargement depuis: http://dev.mysql.com/downloads/connector/python/
Documentation: http://dev.mysql.com/doc/refman/5.5/en/connector-python.html
Il est facile à utiliser et également compatible avec PEP 249 (Python DB API version 2.0).
J'ai rencontré le même problème.
Ma situation: Mac OSX 10.6, python est en 64 bits, mysql en 32 bits et _mysql.so en 32 bits.
Solution: désinstallez mysql (http://steveno.wordpress.com/2009/03/26/uninstall-mysql-on-mac-os-x/) et installez mysql 64 bits. Assurez-vous ensuite que mysql_config pointe sur celui que vous venez d'installer.
IMPORTANT:
supprime tous les _mysql.so du répertoire MySQL-python-1.2.3 (c’est ce que vous téléchargez) ou supprimez simplement le répertoire entier et générez-le à nouveau à partir du fichier tar. Ensuite, compilez et réinstallez. Alors _mysql.so sera en 64 bits. Maintenant, vous pouvez l'importer. Si vous voyez dyld: Library not loaded
, exportez DYLD_LIBRARY_PATH=/usr/local/mysql/lib
J'ai eu le même problème avec mon Mac ElCaptain et résolu le problème en suivant cet autre post . Utilisez simplement infusion et votre problème est résolu.
Note complémentaire pour clarifier le problème:
Le message d'erreur est:
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
L'architecture mach-o, mais incorrecte error signifie que python et _mysql.so ont une architecture différente (binaire 32 bits/64 bits). Nous pouvons le vérifier par:
file $(which python)
file /Users/phoebebr/.python-eggs/MySQL_python-1.2.3c1-py2.6-macosx-10.6-universal.Egg-tmp/_mysql.so
Et si elles ne correspondent pas, nous devrions les faire correspondre. Pour moi, mon _mysql.so est 32 bits (il m'est arrivé d'installer le mysql 32 bits) et mon python2.7 s'exécute en 64 bits par défaut. Je force Python s'exécute en 32 bits par:
export VERSIONER_PYTHON_PREFER_32_BIT=yes
Et problème résolu.
python 2.6+ peut être exécuté en mode 64 ou 32 bits, vérifiez Comment puis-je déterminer si mon shell python est exécuté en mode 32 bits ou 64 bits sous OS X?
Ce problème a été résolu pour moi en sélectionnant la version correcte de python. Si vous avez installé avec macports:
Sudo port select python python26