Ciao ragazzi,
no, non mi sono impazzito, l’articolo è in italiano 😀
Oggi voglio parlarvi di un mio esperimento portato a termine con successo. Molti di voi (spero nessuno) avranno perso il sonno nel tentare di far funzionare su leopard il modulo python MySQLdb, assolutamente indispensabile per gestire i database mysql con python, altrettanto indispensabile per usare Django.
Nota ai naviganti: Se siete su Leopard e dovete ancora installare mysql, allora installate la versione mysql-5.0.67-osx10.4-universal.tar. gz, perchè pare che risolva i problemi di architettura.
Cosa centra l’architettura? Il problema nasce dal fatto che è molto facile avere installata una versione di python a 32 bit, il server apache della apple a 64 bit e mysql o a 64 o a 32bit.. di conseguenza quando si prova ad importare il modulo di incappa nel seguente errore:
Traceback (most recent call last): File “”, line 1, in File “MySQLdb/__init__.py”, line 19, in import _mysql File “build/bdist.macosx-10.5-i386/egg/_mysql.py”, line 7, in File “build/bdist.macosx-10.5-i386/egg/_mysql.py”, line 6, in __bootstrap__ ImportError: dynamic module does not define init function (init_mysql) >>>
Ma andiamo con ordine.
Installazione e configurazione
Ci sono un sacco di guide sull’ installazione, che vi riporto come references a fine articolo, ma vediamo speditamente cosa fare. Prima di tutto scaricate il modulo dal sito ufficiale di MySQLdb, decomprimetelo ed entrate nella cartella. Per prima cosa dovete aprire il file _mysql.c e commentare le seguenti linee:
37 //#ifndef uint
38 //#define uint unsigned int
39 //#endif
dove i numeri sono i numeri di riga per una facile individuazione. Dopodichè cambiate queste altre:
484 unit port = MYSQL_PORT;
deve diventare: unsigned int port = MYSQL_PORT;
485 unit client_flag = 0;
deve diventare: unsigned int client_flag = 0;
Bene. Ora aprite il file site.cfg e cambiate:
threadsafe = True
in
threadsafe = False
Ora scaricatevi la versione di mysql che vi ho consigliato qualche riga fa ma NON INSTALLATELA! Piuttosto scompattatela in una cartella a vostro piacere: (es. /Users/vostrahome/mysql/).
A questo punto sempre nel file site.cfg aggiungete (o modificate se c’è) la seguente riga:
mysql_config = /Users/vostrahome/mysql/bin/mysql_config
dove /Users/vostrahome/mysql è la cartella dove avete decompresso la versione scaricata di mysql.
Perfetto! Adesso la procedura d’installazione dovrebbe andare per il meglio. Lanciate da shell:
python setup.py build sudo python setup.py install
E dovrebbe filare tutto liscio. Adesso create un soft link in questo modo:
sudo ln -s /usr/local/mysql/lib/ /usr/local/mysql/lib/mysql
Poichè siamo su Mac o non su Linux. Di solito a questo punto dovreste avere una versione di MySQLdb funzionante. Per me non è stato così. Nel mio caso ha funzionato copiare la cartella lib contenuta in /Users/vostrahome/mysql dentro la mia directory di installazione di mysql, cioè /usr/local/mysql/lib/.
Per chi non fosse pratico di permessi e cose varie, prima fate un backup delle vecchie librerie :
cd /usr/local/mysql/ sudo cp -R lib lib.bak cd lib sudo rm * cd .. sudo rmdir lib sudo cp -R /Users/vostrahome/mysql/lib /usr/local/mysql/
A questo punto se tutto è andato bene dovreste avere il vostro MySQLdb funzionante!
Ogni macchina è diversa dalle altre, quindi c’è la possibilità che la procedura che vi ho descritto possa non funzionare sui vostri computer. Per questo vi lascio dei link utili dove viene spiegato lo stesso procedimento ma con approcci diversi. Alla prossima, ciao!
Alfredo
REFERENCES:
Problems in Building 1.2.2 on Mac Os 10.5
David Cramer.net – MySQLdb on Leopard
Antonio Cangiano – How to install Django with MySQLdb on MacOSx