Mise à jour pour ceux qui utilisent Python3 : Vous pouvez simplement utiliser conda install mysqlclient
pour installer les bibliothèques nécessaires à l'utilisation de 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 SO magie.
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 (encore ?) de MySQLdb dit ici que l'un des problèmes les plus pernicieux est que OS X est installé avec une version 32 bits de Python, mais la plupart des utilisateurs moyens (moi y compris) sautent probablement pour installer la version 64 bits de MySQL. Mauvaise décision... supprimez la version 64 bits si vous l'avez installée (des 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 sur la façon de construire et d'installer les bibliothèques MySQLdb. Ils ont souvent des différences subtiles. Ceci 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 vous avez MySQL, Python et GCC installé sur le mac.
Étape 1 : Téléchargez le dernier Adaptateur MySQL pour Python 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
QUELQUES ÉTAPES SUPPLÉMENTAIRES, (de ce commentaire )
Étape 3b : Supprimez tout sous votre répertoire MySQL-python-1.2.2/build/* -- ne faites pas confiance au "python setup.py clean" pour le faire pour vous
Étape 3c : Supprimez l'œuf sous Users/$USER/.python-eggs
Étape 4 : À l'origine, la modification de _mysql.c était requise, mais elle n'est désormais 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 les éléments suivants
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 indiquant que Library not loaded: libmysqlclient.18.dylib
se 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 import MySQLdb
sans aucune erreur.
Un dernier hic cependant 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é depuis /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 pérenne) et comprendre que vous devez cd ..
out of build directory et 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.