Mise à jour pour ceux qui utilisent Python3:
Vous pouvez simplement utiliser conda install mysqlclient
pour installer les bibliothèques requises pour utiliser MySQLdb tel qu'il existe actuellement. La question SO suivante était un indice utile: Python 3 ImportError: Aucun module nommé «ConfigParser» . L'installation de mysqlclient installera mysqlclient, mysql-connector et llvmdev (au moins, il a installé ces 3 bibliothèques sur ma machine).
Voici le récit de mon expérience décousue avec ce problème. J'adorerais le voir édité ou généralisé si vous avez une meilleure expérience du problème ... appliquez un peu de cette magie SO.
Remarque: les commentaires du paragraphe suivant s'appliquent à Snow Leopard, mais pas à Lion, qui semble nécessiter MySQL 64 bits
Tout d'abord, l'auteur (toujours?) De MySQLdb dit ici que l'un des problèmes les plus pernicieux est qu'OS X est installé avec une version 32 bits de Python, mais la plupart des joes moyens (moi y compris) sautent probablement pour installer la version 64 bits de MySQL. Mauvais mouvement ... supprimez la version 64 bits si vous l'avez installée (les instructions sur cette tâche fastidieuse sont disponibles sur SO ici ), puis téléchargez et installez la version 32 bits (package ici )
Il existe de nombreuses étapes pour créer et installer les bibliothèques MySQLdb. Ils ont souvent des différences subtiles. Cela m'a semblé le plus populaire et a fourni la solution de travail. Je l'ai reproduit avec quelques modifications ci-dessous
Étape 0:
Avant de commencer, je suppose que MySQL, Python et GCC sont installés sur le mac.
Étape 1:
Téléchargez le dernier adaptateur MySQL pour Python à partir de SourceForge.
Étape 2:
Extrayez votre package téléchargé:
tar xzvf MySQL-python-1.2.2.tar.gz
Étape 3:
Dans le dossier, nettoyez le package:
sudo python setup.py clean
COUPLE D'ÉTAPES SUPPLÉMENTAIRES, (à partir de ce commentaire )
Étape 3b:
supprimez tout ce qui se trouve dans votre répertoire MySQL-python-1.2.2 / build / * - ne faites pas confiance à "python setup.py clean" pour le faire à votre place
Étape 3c:
Supprimez l'œuf sous Users / $ USER / .python-eggs
Étape 4:
À l'origine, il était nécessaire de modifier _mysql.c, mais n'est plus nécessaire. La communauté MySQLdb semble avoir corrigé ce bogue maintenant.
Étape 5:
Créez un lien symbolique sous lib pour pointer vers un sous-répertoire appelé mysql. C'est là qu'il recherche lors de la compilation.
sudo ln -s /usr/local/mysql/lib /usr/local/mysql/lib/mysql
Étape 6:
Modifiez le fichier setup_posix.py et modifiez ce qui suit
mysql_config.path = "mysql_config"
à
mysql_config.path = "/ usr / local / mysql / bin / mysql_config"
Étape 7:
Dans le même répertoire, reconstruisez votre package (ignorez les avertissements qui l'accompagnent)
sudo python setup.py build
Étape 8:
Installez le package et vous avez terminé.
sudo python setup.py install
Étape 9:
Testez si cela fonctionne. Cela fonctionne si vous pouvez importer MySQLdb.
python
>>> import MySQLdb
Étape 10:
Si lors de la tentative d'importation, vous recevez une erreur se plaignant que se Library not loaded: libmysqlclient.18.dylib
terminant par: Reason: image not found
vous devez créer un lien symbolique supplémentaire qui est:
sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib
Vous devriez alors pouvoir le faire import MySQLdb
sans aucune erreur.
Un dernier problème est que si vous démarrez Python à partir du répertoire de construction, vous obtiendrez cette erreur:
/Library/Python/2.5/site-packages/MySQL_python-1.2.3c1-py2.5-macosx-10.5-i386.egg/_mysql.py:3: UserWarning: Le module _mysql a déjà été importé de /Library/Python/2.5/ site-packages / MySQL_python-1.2.3c1-py2.5-macosx-10.5-i386.egg / _mysql.pyc, mais XXXX / MySQL-python-1.2.3c1 est ajouté à sys.path
C'est assez facile pour Google, mais pour vous éviter les ennuis, vous vous retrouverez ici (ou peut-être pas ... pas une URL particulièrement à l'épreuve du temps) et comprendrez que vous devez cd ..
sortir du répertoire de construction et que l'erreur devrait disparaître.
Comme je l'ai écrit en haut, j'aimerais voir cette réponse généralisée, car il existe de nombreuses autres expériences spécifiques de cet horrible problème. Modifiez ou fournissez votre propre meilleure réponse.