Come installare MySQLdb (libreria di accesso ai dati Python su MySQL) su Mac OS X?


99

Sono un principiante di Python, ma ho appena trascorso una giornata a capire come far funzionare correttamente MySQLdb e l'universo secondo Google include numerosi riferimenti a cosa sia un PITA e un numero eccessivo di guide che sembrano essere obsoleto. Dato che questo sito ha lo scopo di affrontare questo tipo di problemi e so che avrò bisogno di un riferimento alla soluzione in futuro, farò la domanda, fornirò la mia risposta e vedrò cos'altro fluttua nel superficie.

Quindi la domanda è come far funzionare MySQLdb su Mac OS X?

Risposte:


133

Aggiornamento per chi usa Python3: Puoi semplicemente usare conda install mysqlclientper 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.dylibtermina 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 MySQLdbsenza 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.


1
Si noti che il Python fornito da Apple su 10.6 (Snow Leopard) preferisce essere eseguito a 64 bit (è universale a 32 bit / 64 bit). Ci sono anche altre insidie. Per un po 'nella serie mysql 5.1.x, i tarball OS X impacchettati da mysql erano difettosi (si diceva che fossero universali ma non lo erano). L'adattatore del database per Python, MySQLdb, ha avuto i suoi problemi. Questo è un caso in cui ti consigliamo di utilizzare MacPorts per creare automaticamente tutto ciò di cui hai bisogno. È semplicemente troppo facile che qualcosa vada storto.
Ned Deily

Lo lascio qui nel caso in cui aiuti qualcun altro. Ho anche dovuto modificare site.cfg per impostare mysql_config sul percorso corretto. Non credo che inizialmente avesse un percorso, quindi l'impostazione predefinita era / opt / ..., ma dovevo indicarlo a / usr / local / mysql / ...
tchaymore

8
Ho anche dovuto correre:sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib
David Underhill il

1
Sono anche in esecuzione su Lion e ho avuto enormi problemi a farlo funzionare. Ho finalmente trovato questa fantastica domanda e risposta SO e l'ho seguita al 100%. Non ha funzionato per me fino a quando ho aggiunto, esattamente come David Underhill osservato in precedenza: sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib. Una volta eseguito, è stato importato come previsto ... finalmente. Wheewwww. Solo un fyi per quelli in una posizione simile.
John the King,

2
Si scopre che avevo le librerie mysql ma solo non collegate correttamente. Mac OS ElCapitan non consente il collegamento in / usr / lib. Quindi solo questo mi è bastato: sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/local/lib/libmysqlclient.18.dylib
Maruthi

101

Un modo semplice e veloce per Mac OS X 10.8 (Mountain Lion), 10.9 (Mavericks), 10.10 (Yosemite) e 10.11 (El Capitan):

Presumo che tu abbia XCode, i suoi strumenti da riga di comando , Python e MySQL installati.

  1. Installa PIP:

    sudo easy_install pip
  2. Modifica ~ / .profile: (potrebbe non essere necessario in Mac OS X 10.10)

    nano ~/.profile

    Copia e incolla le seguenti due righe

    export PATH=/usr/local/mysql/bin:$PATH
    export DYLD_LIBRARY_PATH=/usr/local/mysql/lib/

    Salva ed esci. Afterwords esegue il seguente comando:

    source  ~/.profile
  3. Installa MySQLdb

    sudo pip install MySQL-python

    Per verificare se tutto funziona correttamente, prova

    python -c "import MySQLdb"

Ha funzionato come un fascino per me. Spero possa essere d'aiuto.

Se incontri un errore relativo a una libreria mancante: Libreria non caricata: libmysqlclient.18.dylib, devi creare un link simbolico in questo /usr/libmodo:

sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib 

2
Grazie, questa soluzione funziona anche su Mac OSX 10.9 :-)
matsoftware

2
Questo ha funzionato alla grande per me (beta pubblica di Yosemite; Mysql 5; Py2.7), ma avevo bisogno di eseguire il sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylibcomando dal basso.
Michael Scott Cuthbert

Buona risposta. Avevo già altre definizioni di DYLD_LIBRARY_PATH nel mio .bash_profile, quindi l'ho aggiunto in questo modoexport DYLD_LIBRARY_PATH=$DYLD_LIBRARY_PATH:/usr/local/mysql/lib/
beroe

1
Ho appena verificato che funzioni con 10.10.4. Inoltre, utilizzando mysql da homebrew, la modifica di .profile non era necessaria per far funzionare questo.
Isotopp

1
Dopo aver installato MySQL con brew install mysql, non ho dovuto eseguire il secondo passaggio.
dav.garcia

36

Installa mysql e python tramite Macports I facchini hanno fatto tutto il lavoro difficile.

sudo port install py26-mysql 
sudo port install mysql5-server

dovrebbe installare quello che ti serve. (vedi Stack overflow per i commenti sul server mysql )

Se hai solo bisogno di connetterti a mysql e non eseguire un server, la prima riga è sufficiente.

Macports ora (inizio 2013) fornirà download binari per combinazioni comuni di OS un'architettura eseguibile, per altri (e se lo richiedi) verrà compilato dai sorgenti.

In generale, macports (o fink) aiuta quando ci sono librerie complesse ecc. Che devono essere installate.

Il codice solo Python e se semplici dipendenze C possono essere impostate tramite setuptools ecc., Ma inizia a diventare complesso se si mescolano i due.


3
Nota che quando inizi a usare MacPorts, assicurati che il tuo percorso preferisca / opt / local / bin su / usr / bin poiché MacPorts installa le cose in / opt / local.
Teemu Kurppa,

4
Sì! E salta la seconda riga se hai solo bisogno di connetterti a un server MySQL esistente. Sfortunatamente, con il numero di dipendenze coinvolte, provare a usare python con mysql su OS X è un caso in cui è più facile lasciare che MacPorts installi un'istanza di python aggiuntiva piuttosto che provare a giocare tu stesso a gestore di pacchetti.
Ned Deily,

Come nota a margine, se ricevi un avviso di deprecazione, la pagina seguente contiene la correzione: bugs.launchpad.net/python-mysqldb/+bug/341943
Jay Taylor

4
Cordiali saluti, se fai solo la prima riga (almeno con py27-mysql), finirà comunque per installare mysql5. Scaricando e compilando il codice sorgente. Probabilmente non quello che vuoi. Grr.
Ben Hardy

@ BenHardy - viene installato tutto, che è quello che vuoi ed esattamente quello che volevo dire - anche ora gli eseguibili Lion e Snow Leopard sono costruiti centralmente da macports quindi non eseguiranno una compilazione locale nella maggior parte dei casi.
mmmmmm

15

Installa pip:

sudo easy_install pip

Installa birra:

ruby -e "$(curl -fsSL https://raw.github.com/Homebrew/homebrew/go/install)"

Installa mysql:

brew install mysql

Installa MySQLdb

sudo pip install MySQL-python

Se hai problemi di compilazione, prova a modificare il file ~ / .profile come in una delle risposte qui.


Grazie! Questo ha funzionato su Sierra [OSX 10.12.6 (16G29)].
Haranadh

curl: (22) L'URL richiesto ha restituito l'errore: 404 Not Found
Thirupathi Thangavel

fatto questo ma con pip install mysqlclientinvece. Lavori!
jeremysprofile

13

Ecco un altro passaggio che ho dovuto eseguire, dopo aver ricevuto un errore al completamento del passaggio 9:

ImportError: dlopen(/Users/rick/.python-eggs/MySQL_python-1.2.3-py2.6-macosx-10.6-universal.egg-tmp/_mysql.so, 2): Library not loaded: libmysqlclient.18.dylib

    sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib

Riferimento: grazie! http://ageekstory.blogspot.com/2011_04_01_archive.html



4

Ho appena avuto questo problema (di nuovo!) Dopo aver ricevuto una nuova scatola di Lion.

La migliore soluzione che ho trovato (ancora non ottimale al 100%, ma funzionante):

si può farlo scaricando XCode / strumenti di sviluppo da parte di Apple - questo è un grande scaricare -

... ma invece ti consiglio questo github che ha quello che ti serve (e non ha XCode): https://github.com/kennethreitz/osx-gcc-installer

Ho scaricato il loro PKG precostruito per lion, https://github.com/downloads/kennethreitz/osx-gcc-installer/GCC-10.7-v2.pkg

  • assicurati di aver scaricato una versione a 64 BIT di MYSQL Community. (L'installazione di DMG è un percorso facile) http://dev.mysql.com/downloads/mysql/

  • Imposta i percorsi come segue:

    export PATH = $ PATH: / usr / local / mysql-XXXX

    esporta DYLD_LIBRARY_PATH = / usr / local / mysql / lib /

    export ARCHFLAGS = '- arch x86_64'

NOTA CHE:

1 in mysql-XXXX sopra, XXX è la versione specifica che hai scaricato. (Probabilmente / usr / local / mysql / funzionerebbe anche perché molto probabilmente è un alias dello stesso, ma non pretendo di conoscere la tua configurazione)

2 Ho visto che suggeriva di impostare ARCHFLAGS su "-arch i386 -arch x86_64" ma specificare solo x86_64 sembrava funzionare meglio per me. (Posso pensare ad alcune ragioni per questo ma non sono strettamente rilevanti).

  • Installa la bestia!

    easy_install MySQL-python

  • ULTIMO PASSO:

Aggiungi in modo permanente DYLD_LIBRARY_PATH!

Puoi aggiungerlo al tuo bash_profile o simile. Questo è stato il passaggio mancante per me, senza il quale il mio sistema ha continuato a insistere su vari errori nel trovare _mysql.so e così via.

esporta DYLD_LIBRARY_PATH = / usr / local / mysql / lib /

@ richard-boardman, ho appena notato la tua soluzione di collegamento software, che potrebbe in effetti fare la stessa cosa che fa la mia soluzione PATH ... gente, qualunque cosa funzioni meglio per te.

Miglior riferimento: http://activeintelligence.org/blog/archive/mysql-python-aka-mysqldb-on-osx-lion/


4

Potresti provare a usare il puro-python pymysql:

sudo easy_install pymysql

(Oppure usa pipse lo hai installato.) Quindi, aggiungi questo prima di te import MySQLdbnel codice:

try:
    import pymysql
    pymysql.install_as_MySQLdb()
except ImportError:
    pass

3

O semplice prova:

> sudo easy_install MySQL-python

Se dà un errore come di seguito:

EnvironmentError: mysql_config non trovato

, quindi esegui questo

> export PATH=$PATH:/usr/local/mysql/bin

0

Se stai usando MySQL a 64 bit, usando ARCHFLAGS per specificare l'architettura della tua cpu durante la creazione di librerie mysql-python farebbe il trucco:

ARCHFLAGS='-arch x86_64' python setup.py build
ARCHFLAGS='-arch x86_64' python setup.py install

0
export PATH=$PATH:/usr/local/mysql/bin/

dovrebbe risolvere il problema per te poiché il sistema non è in grado di trovare il file mysql_config.


0

Su macos Sierra questo funziona per me, dove python è gestito da anaconda:

anaconda search -t conda mysql-python

anaconda show CEFCA/mysql-python

conda install --channel https://conda.anaconda.org/CEFCA mysql-python

Da usare con SQLAlchemy:

Python 2.7.13 | Continuum Analytics, Inc. | (impostazione predefinita, 20 dicembre 2016, 23:05:08) [GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.57)] su darwin Digita "help", "copyright", "credits" o "license" per ulteriori informazioni informazione. Anaconda è offerto da Continuum Analytics. Consulta: http://continuum.io/thanks e https://anaconda.org

>>> da importazione sqlalchemy *

>>> dbengine = create_engine ('mysql: // ....')


0

Questa risposta è un aggiornamento, circa novembre 2019. Nessuna delle popolari installazioni di pip ti darà una configurazione funzionante su MacOS 10.13 (e probabilmente anche su altre versioni). Ecco un modo semplice per far funzionare le cose:

brew install mysql
pip install mysqlclient

Se hai bisogno di aiuto per l'installazione di brew, visita questo sito: https://brew.sh/


0

Mi sono imbattuto in questo problema e ho scoperto che mysqlclientdeve sapere dove trovare openssl e OSX lo nasconde per impostazione predefinita.

Individua openssl con brew info openssl, quindi aggiungi il percorso al tuo opensslcestino al tuo PERCORSO:

export PATH="/usr/local/opt/openssl/bin:$PATH"

Consiglio di aggiungerlo al tuo .zshrc o .bashrc in modo da non doverti preoccupare in futuro. Quindi, con quella variabile esportata (che potrebbe richiedere la chiusura e la riapertura della sessione bash), aggiungi altre due variabili env:

# in terminal
export LDFLAGS="-L/usr/local/opt/openssl/lib"
export CPPFLAGS="-I/usr/local/opt/openssl/include"

Quindi, finalmente, esegui:

pipenv install mysqlclient

e dovrebbe installarsi bene.

Fonte: https://medium.com/@shandou/pipenv-install-mysqlclient-on-macosx-7c253b0112f2

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.