2009-08-19 11 views
7

Un collega ha ottenuto questo messaggio di errore quando si tenta di utilizzare MySQLdb da Django:Django - MySQLdb: Simbolo non trovato: _mysql_affected_rows

[...] 
ImproperlyConfigured("Error loading MySQLdb module: %s" % e) django.core.exceptions.ImproperlyConfigured: 
Error loading MySQLdb module: dlopen(/Users/roy/.python-eggs/MySQL_python-1.2.3c1-py2.5-macosx-10.5-i386.egg-tmp/_mysql.so, 2): 
Symbol not found: _mysql_affected_rows 
Referenced from: /Users/roy/.python-eggs/MySQL_python-1.2.3c1-py2.5-macosx-10.5-i386.egg-tmp/_mysql.so Expected in: dynamic lookup 

Sta usando OS X 10.5, Python 2.5 (che arrivano con OS X), MySQL 5.1 & MySQLdb 1.2.3c1.

Qualche idea su come attaccarlo?

risposta

0

Sì, l'uovo MySQLDb è stato compilato su una versione diversa di libmysqlclient rispetto alla versione presente nel sistema. È necessario ottenere un egg corretto (disinstallando il precedente) o creare MySQLDb da zero per compilarlo contro la libreria presente nel sistema.

Non so perché, ma penso che il vostro collega potrebbe essere interessato a questa domanda:

Configuring Django to use remote mysql server?

6

sarebbe meglio se si installa mysql ed è binding Python da zero, io uso il seguente passi ogni volta che ho bisogno MySQLdb su OS X 10.4 o 10.5:

  1. Installare MySQL per il sistema, il programma di installazione dmg dovrebbero essere sufficienti

  2. La posizione predefinita di MySQL sarà da qualche parte intorno: /usr/local/mysql-5.0.45-osx10.4-i686. Da /usr/local/mysql/lib, creare un link simbolico:

    ln -s ../../mysql-5.0.45-osx10.4-i686/lib mysql

  3. Scarica il MySQLdb source e scompattarlo

  4. Modificare il file site.cfg sotto la directory decompressa MySQLdb, commentare la registry_key e impostare mysql_config a:

    mysql_config = /usr/local/mysql-5.0.45-osx10.4-i686/bin/mysql_config

  5. Carry on con i pacchetti Python regolari costruire dall'interno directory MySQLdb:

    sudo python setup.py install

  6. Se tutto va bene al di sopra, prova MySQLdb in un nuovo terminale:

    python -c "import MySQLdb"

Il sopra non dovrebbe restituire nulla in caso di successo. L'esempio precedente mostra OS 10.4 e MySQL 5.0, sostituendoli con la versione degli strumenti appropriata.

+0

Non funziona su 10.6 –

+0

Il mysql 10.6 dmg non è ancora uscito, una volta rilasciato rilascia un altro giro. –

+1

Grazie per questa soluzione. Ha quasi funzionato sul mio sistema (OSX 10.7). Comunque ho bisogno di aggiungere il flag ** - arch x86_64 ** ai flag del compilatore e del linker. Ecco come ho bisogno di cambiare il ** setup_posix.py ** dal pacchetto MySQLdb-python: nella sezione dove sono presenti le est_options sono stato modificato 'extra_compile_args = extra_compile_args' in' extra_compile_args = extra_compile_args + ['-arch' , "x86_64"] 'e' extra_link_args = extra_link_args' a 'extra_link_args = extra_link_args + ['-arch'," x86_64 "]' – spassig

0

Ho avuto problemi con la soluzione di Thierry su Python a 32 bit (2.6.5) su OS X 10.6.

L'aggiornamento a Python 2.7 versione a 64 bit ha risolto il problema per me.

0

istruzioni del Thiery lavorato bene per me con il MySQL 10.6 dmg e MySQLdb ver 1.2.3

Essa aiuta a iniziare con una lavagna pulita, in modo da assicurarsi di disinstallare le prime versioni di MySQL.Guarda questo post per la disinstallazione help How do you uninstall MySQL from Mac OS X?

Grazie!

1

Complicato e difficile ma ha funzionato su MacOSX Lion.

si prevede di utilizzare:

Xcode 
Brew 
Port 
Pip 

assicurarsi di avere Xcode (4.x) installato, e il vostro Mac è configurato per trovare gli eseguibili perché sarà utilizzato da MacPorts durante il processo di installare mysql-python.

Assicurarsi che gli strumenti da riga di comando sono installati Xcode

inizio Xcode app >> preferenze >> download >> >> scheda Componenti della riga di comando Strumenti >> fare clic su Installa

eseguire i seguenti comandi dal terminale .

xcodebuild -version

se è stato eseguito in questo errore

/usr/bin/xcodebuild -version Error: No developer directory found at /Developer

tenta di eseguire

/usr/bin/xcode-select
Questo aggiornerà il percorso della directory sviluppatore.

allora avete bisogno di passare manualmente al nuovo Xcode dir installazione in/Applicazioni:

sudo /usr/bin/xcode-select -switch /Applications/Xcode.app 

Ref

Disinstalla mysql [backup che i dati prima di farlo!].

sudo rm /usr/local/mysql 
sudo rm -rf /usr/local/mysql* 
sudo rm -rf /Library/StartupItems/MySQLCOM 
sudo rm -rf /Library/PreferencePanes/My* 
edit /etc/hostconfig and remove the line MYSQLCOM=-YES- 
sudo rm -rf /Library/Receipts/mysql* 
sudo rm -rf /Library/Receipts/MySQL* 
sudo rm -rf /var/db/receipts/com.mysql.* 

Usa brew di installare di nuovo Mysql:

brew install mysql 

si potrebbe incorrere in questo errore.

Error: Cannot write to /usr/local/Cellar 

il fix.

si dovrebbe essere pronti per andare ora.

sudo port install py27-mysql 

pip install mysql-python 

python -c "import MySQLdb" 

se non si verificano errori MySQLdb è installato.

-1
sudo apt-get install python-mysqldb 

assicurarsi dovrebbe installato correttamente

oppure è possibile utilizzare un'altra alternativa come easy_install

0

Prova a correre:

easy_install -U distribute 
pip install --upgrade mysql-python 

Nota: Se avete errori di dispersi simboli durante la compilazione, è necessario disporre di librerie di sviluppo mysql per compilarle.

Su Linux è facile installarlo:

sudo apt-get install mysql-devel 

o:

sudo yum install mysql-devel 

Su Mac probabilmente necessario scaricare MySQL Connector e quindi potrebbe essere necessario passare in un --with-mysql -libs opzione per puntare alla directory quando vengono decompresse le librerie C. Oppure puoi provare a mettere le librerie nella directory predefinita:/usr/lib64/mysql

Problemi correlati