Aggiornamento per chi usa Python3:
Puoi semplicemente usare conda install mysqlclient
per installare le librerie richieste per usare MySQLdb così come esiste attualmente. La seguente domanda SO è stata un indizio utile: Python 3 ImportError: Nessun modulo denominato "ConfigParser" . L'installazione di mysqlclient installerà mysqlclient, mysql-connector e llvmdev (almeno, ha installato queste 3 librerie sulla mia macchina).
Ecco il racconto della mia sconclusionata esperienza con questo problema. Mi piacerebbe vederlo modificato o generalizzato se hai una migliore esperienza del problema ... applica un po 'di quella magia SO.
Nota: i commenti nel paragrafo successivo si applicano a Snow Leopard, ma non a Lion, che sembra richiedere MySQL a 64 bit
Prima di tutto, l'autore (ancora?) Di MySQLdb dice qui che uno dei problemi più perniciosi è che OS X viene installato con una versione a 32 bit di Python, ma la maggior parte dei joes medi (me compreso) probabilmente salta per installare la versione a 64 bit di MySQL. Cattiva mossa ... rimuovi la versione a 64 bit se l'hai installata (le istruzioni su questa attività poco impegnativa sono disponibili su SO qui ), quindi scarica e installa la versione a 32 bit (pacchetto qui )
Esistono numerosi passaggi su come creare e installare le librerie MySQLdb. Spesso hanno sottili differenze. Questo mi è sembrato il più popolare e ha fornito la soluzione di lavoro. L'ho riprodotto con un paio di modifiche di seguito
Passaggio 0:
prima di iniziare, presumo che tu abbia MySQL, Python e GCC installati sul Mac.
Passaggio 1:
scarica l'ultimo MySQL per l'adattatore Python da SourceForge.
Passaggio 2:
estrai il pacchetto scaricato:
tar xzvf MySQL-python-1.2.2.tar.gz
Passaggio 3:
all'interno della cartella, pulire il pacchetto:
sudo python setup.py clean
COPPIA DI PASSI EXTRA, (da questo commento )
Passaggio 3b:
rimuovi tutto sotto la tua directory MySQL-python-1.2.2 / build / * - non fidarti di "python setup.py clean" per farlo per te
Passaggio 3c:
rimuovere l'uovo in Users / $ USER / .python-eggs
Passaggio 4:
originariamente era necessario modificare _mysql.c, ma ora NON È PIÙ NECESSARIO. La comunità di MySQLdb sembra aver corretto questo bug ora.
Passaggio 5:
creare un collegamento simbolico in lib per puntare a una sottodirectory chiamata mysql. Qui è dove cerca durante la compilazione.
sudo ln -s /usr/local/mysql/lib /usr/local/mysql/lib/mysql
Passaggio 6:
modifica setup_posix.py e cambia quanto segue
mysql_config.path = "mysql_config"
per
mysql_config.path = "/ usr / local / mysql / bin / mysql_config"
Passaggio 7:
nella stessa directory, ricostruisci il pacchetto (ignora gli avvisi che lo accompagnano)
sudo python setup.py build
Passaggio 8:
installa il pacchetto e il gioco è fatto.
sudo python setup.py install
Passaggio 9: verifica
se funziona. Funziona se puoi importare MySQLdb.
python
>>> import MySQLdb
Passaggio 10:
se durante il tentativo di importazione si riceve un errore che si lamenta che Library not loaded: libmysqlclient.18.dylib
termina con: Reason: image not found
è necessario creare un collegamento simbolico aggiuntivo che è:
sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib
Dovresti quindi essere in grado di farlo import MySQLdb
senza errori.
Un ultimo inconveniente però è che se avvii Python dalla directory di build otterrai questo errore:
/Library/Python/2.5/site-packages/MySQL_python-1.2.3c1-py2.5-macosx-10.5-i386.egg/_mysql.py:3: UserWarning: Il modulo _mysql era già importato da /Library/Python/2.5/ site-packages / MySQL_python-1.2.3c1-py2.5-macosx-10.5-i386.egg / _mysql.pyc, ma XXXX / MySQL-python-1.2.3c1 viene aggiunto a sys.path
Questo è abbastanza facile per Google, ma per risparmiarti i problemi finirai qui (o forse no ... non un URL particolarmente a prova di futuro) e scoprirai che devi cd ..
uscire dalla directory di build e l'errore dovrebbe scomparire.
Come ho scritto in alto, mi piacerebbe vedere questa risposta generalizzata, poiché ci sono numerose altre esperienze specifiche di questo orribile problema là fuori. Modifica via o fornisci la tua risposta migliore.