Wie installiere ich MySQLdb (Python-Datenzugriffsbibliothek für MySQL) unter Mac OS X?

99

Ich bin ein Python-Neuling, aber ich habe gerade einen Tag damit verbracht, herauszufinden, wie MySQLdb richtig funktioniert, und das Universum enthält laut Google zahlreiche Verweise darauf, was eine PITA ist, und eine übermäßige Anzahl von Anleitungen, die zu sein scheinen veraltet. Angesichts der Tatsache, dass diese Website diese Art von Problemen angehen soll und ich weiß, dass ich in Zukunft einen Verweis auf die Lösung benötigen werde, werde ich die Frage stellen, meine Antwort geben und sehen, was sonst noch auf dem Programm steht Oberfläche.

Die Frage ist also, wie MySQLdb unter Mac OS X funktioniert.

mblackwell8
quelle

Antworten:

132

Update für Benutzer von Python3: Sie können einfach conda install mysqlclientdie Bibliotheken installieren, die für die Verwendung von MySQLdb erforderlich sind, wie es derzeit vorhanden ist. Die folgende SO-Frage war ein hilfreicher Hinweis: Python 3 ImportError: Kein Modul mit dem Namen 'ConfigParser' . Durch die Installation von mysqlclient werden mysqlclient, mysql-connector und llvmdev installiert (zumindest wurden diese 3 Bibliotheken auf meinem Computer installiert).

Hier ist die Geschichte meiner Erfahrung mit diesem Problem. Würde es gerne bearbeitet oder verallgemeinert sehen, wenn Sie eine bessere Erfahrung mit dem Problem haben ... wenden Sie ein bisschen von dieser SO Magie an.

Hinweis: Die Kommentare im nächsten Absatz beziehen sich auf Snow Leopard, nicht jedoch auf Lion, für das anscheinend 64-Bit-MySQL erforderlich ist

Zunächst einmal sagt der Autor (noch?) Von MySQLdb hier, dass eines der schädlichsten Probleme darin besteht, dass OS X mit einer 32-Bit-Version von Python installiert wird, aber die meisten durchschnittlichen Jungs (ich selbst eingeschlossen) springen wahrscheinlich, um die 64-Bit-Version zu installieren von MySQL. Schlechter Zug ... entfernen Sie die 64-Bit-Version, wenn Sie sie installiert haben (Anweisungen zu dieser fummeligen Aufgabe finden Sie auf SO hier ), und laden Sie dann die 32-Bit-Version herunter und installieren Sie sie (Paket hier ).

Es gibt zahlreiche schrittweise Anleitungen zum Erstellen und Installieren der MySQLdb-Bibliotheken. Sie haben oft subtile Unterschiede. Dies schien mir am beliebtesten zu sein und lieferte die funktionierende Lösung. Ich habe es mit ein paar Änderungen unten reproduziert

Schritt 0: Bevor ich anfange, gehe ich davon aus, dass Sie MySQL, Python und GCC auf dem Mac installiert haben.

Schritt 1: Laden Sie den neuesten MySQL for Python-Adapter von SourceForge herunter .

Schritt 2: Extrahieren Sie Ihr heruntergeladenes Paket:

tar xzvf MySQL-python-1.2.2.tar.gz

Schritt 3: Reinigen Sie das Paket im Ordner:

sudo python setup.py clean

PAAR ZUSÄTZLICHER SCHRITTE (aus diesem Kommentar )

Schritt 3b: Entfernen Sie alles aus Ihrem MySQL-python-1.2.2 / build / * -Verzeichnis - vertrauen Sie nicht darauf, dass "python setup.py clean" dies für Sie erledigt

Schritt 3c: Entfernen Sie das Ei unter Benutzer / $ USER / .python-Eier

Schritt 4: Ursprünglich musste _mysql.c bearbeitet werden, ist jetzt aber NICHT MEHR ERFORDERLICH. Die MySQLdb-Community scheint diesen Fehler jetzt behoben zu haben.

Schritt 5: Erstellen Sie unter lib einen symbolischen Link, der auf ein Unterverzeichnis namens mysql verweist. Hier wird beim Kompilieren gesucht.

sudo ln -s /usr/local/mysql/lib /usr/local/mysql/lib/mysql

Schritt 6: Bearbeiten Sie die Datei setup_posix.py und ändern Sie Folgendes

mysql_config.path = "mysql_config"

zu

mysql_config.path = "/ usr / local / mysql / bin / mysql_config"

Schritt 7: Erstellen Sie Ihr Paket im selben Verzeichnis neu (ignorieren Sie die damit verbundenen Warnungen).

sudo python setup.py build

Schritt 8: Installieren Sie das Paket und Sie sind fertig.

sudo python setup.py install

Schritt 9: Testen Sie, ob es funktioniert. Es funktioniert, wenn Sie MySQLdb importieren können.

python

>>> import MySQLdb

Schritt 10: Wenn Sie beim Importversuch eine Fehlermeldung erhalten, die sich über Folgendes beschwert Library not loaded: libmysqlclient.18.dylib: Reason: image not foundSie müssen einen zusätzlichen Symlink erstellen:

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

Sie sollten dann in der Lage sein, import MySQLdbohne Fehler.

Ein letzter Schluckauf ist jedoch, dass beim Starten von Python aus dem Build-Verzeichnis folgende Fehlermeldung angezeigt wird:

/Library/Python/2.5/site-packages/MySQL_python-1.2.3c1-py2.5-macosx-10.5-i386.egg/_mysql.py:3: UserWarning: Modul _mysql wurde bereits aus /Library/Python/2.5/ importiert. site-packages / MySQL_python-1.2.3c1-py2.5-macosx-10.5-i386.egg / _mysql.pyc, aber XXXX / MySQL-python-1.2.3c1 wird zu sys.path hinzugefügt

Dies ist für Google ziemlich einfach, aber um Ihnen die Mühe zu ersparen, werden Sie hier landen (oder vielleicht auch nicht ... keine besonders zukunftssichere URL) und herausfinden, dass Sie dies tun müssencd .. Build-Verzeichnis verlassen müssen und der Fehler verschwinden sollte.

Wie ich oben schrieb, würde ich diese Antwort gerne verallgemeinern, da es zahlreiche andere spezifische Erfahrungen mit diesem schrecklichen Problem gibt. Bearbeiten Sie weg oder geben Sie Ihre eigene, bessere Antwort.

mblackwell8
quelle
1
Beachten Sie, dass der von Apple bereitgestellte Python auf 10.6 (Snow Leopard) lieber 64-Bit ausführt (32-Bit / 64-Bit-Universal). Es gibt auch andere Fallstricke. Für eine Weile in der mysql 5.1.x-Serie waren die von mysql verpackten OS X-Tarballs fehlerhaft (angeblich universell, aber nicht). Der Datenbankadapter für Python, MySQLdb, hatte seine eigenen Probleme. Dies ist ein Fall, in dem Sie gut beraten sind, nur MacPorts zu verwenden, um alles, was Sie benötigen, automatisch zu erstellen. Es ist einfach zu einfach, dass etwas schief geht.
Ned Deily
Ich werde das hier lassen, falls es jemand anderem hilft. Ich musste auch site.cfg ändern, um mysql_config auf den richtigen Pfad zu setzen. Ich glaube nicht, dass es anfangs einen Pfad hatte, also standardmäßig / opt / ..., aber ich musste ihn auf / usr / local / mysql / ...
verweisen
8
Ich musste auch laufen:sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib
David Underhill
1
Ich laufe auch auf Lion und hatte massive Probleme, dies zum Laufen zu bringen. Ich fand endlich diese großartige SO Frage und Antwort und folgte ihr zu 100%. Es hat bei mir nicht funktioniert, bis ich hinzugefügt habe, genau wie David Underhill oben erwähnt hat : sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib. Sobald ich dies ausgeführt habe, wurde es wie erwartet importiert ... endlich. Wheewwww. Nur ein Fyi für diejenigen in einer ähnlichen Position.
Johannes der König
2
Es stellte sich heraus, dass ich MySQL-Bibliotheken hatte, aber nur nicht richtig verlinkt war. Mac OS ElCapitan erlaubt keine Verknüpfung mit / usr / lib. Genau das war genug für mich: sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/local/lib/libmysqlclient.18.dylib
Maruthi
100

Ein schneller und einfacher Weg für Mac OS X 10.8 (Mountain Lion), 10.9 (Mavericks), 10.10 (Yosemite) und 10.11 (El Capitan):

Ich gehe davon aus, dass Sie XCode, seine Befehlszeilentools , Python und MySQL installiert haben.

  1. PIP installieren:

    sudo easy_install pip
  2. Bearbeiten ~ / .profile: (In Mac OS X 10.10 möglicherweise nicht erforderlich)

    nano ~/.profile

    Kopieren Sie die folgenden zwei Zeilen und fügen Sie sie ein

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

    Speichern und schließen. Nachworte führen den folgenden Befehl aus:

    source  ~/.profile
  3. Installieren Sie MySQLdb

    sudo pip install MySQL-python

    Um zu testen, ob alles gut funktioniert, versuchen Sie es einfach

    python -c "import MySQLdb"

Es hat wie ein Zauber für mich funktioniert. Ich hoffe, es hilft.

Wenn Sie einen Fehler in Bezug auf eine fehlende Bibliothek feststellen : Bibliothek nicht geladen: libmysqlclient.18.dylib , müssen Sie einen Symlink erstellen , um Folgendes zu erreichen /usr/lib:

sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib 
F Lekschas
quelle
2
Vielen Dank, diese Lösung funktioniert auch unter Mac OSX 10.9 :-)
Matsoftware
2
Dies funktionierte hervorragend für mich (Yosemite Public Beta; Mysql 5; Py2.7), aber ich musste den sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylibBefehl von unten ausführen .
Michael Scott Cuthbert
Gute Antwort. Ich hatte bereits andere Definitionen von DYLD_LIBRARY_PATH in meinem .bash_profile, also habe ich es auf diese Weise hinzugefügtexport DYLD_LIBRARY_PATH=$DYLD_LIBRARY_PATH:/usr/local/mysql/lib/
beroe
1
Ich habe gerade überprüft, ob dies mit 10.10.4 funktioniert. Bei Verwendung von MySQL von Homebrew war die Änderung des Profils nicht erforderlich, damit dies funktioniert.
Isotopp
1
Nach der Installation von MySQL mit brew install mysqlmusste ich den 2. Schritt nicht durchlaufen.
dav.garcia
36

Installieren Sie MySQL und Python über Macports. Die Träger haben die ganze schwierige Arbeit erledigt.

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

sollte installieren, was Sie brauchen. ( Kommentare zum MySQL-Server finden Sie unter Stapelüberlauf. )

Wenn Sie nur eine Verbindung zu MySQL herstellen und keinen Server ausführen müssen, ist die erste Zeile ausreichend.

Macports now (Anfang 2013) bietet binäre Downloads für gängige Betriebssystemkombinationen und eine ausführbare Architektur, für andere (und wenn Sie dies anfordern) wird es aus dem Quellcode erstellt.

Im Allgemeinen helfen Macports (oder Fink), wenn komplexe Bibliotheken usw. installiert werden müssen.

Nur Python-Code und wenn einfache C-Abhängigkeiten über Setuptools usw. eingerichtet werden können, wird es jedoch komplex, wenn Sie beide mischen.

mmmmmm
quelle
3
Beachten Sie, dass Sie beim Starten der Verwendung von MacPorts sicherstellen müssen, dass Ihr Pfad / opt / local / bin gegenüber / usr / bin bevorzugt, da MacPorts Dinge unter / opt / local installiert.
Teemu Kurppa
4
Ja! Überspringen Sie die zweite Zeile, wenn Sie nur eine Verbindung zu einem vorhandenen MySQL-Server herstellen müssen. Angesichts der Anzahl der damit verbundenen Abhängigkeiten ist der Versuch, Python mit MySQL unter OS X zu verwenden, leider ein Fall, in dem es einfacher ist, MacPorts eine zusätzliche Python-Instanz installieren zu lassen, als den Paketmanager selbst zu spielen.
Ned Deily
Als Nebenbemerkung, wenn Sie eine Verfallswarnung erhalten, hat die folgende Seite die Korrektur: bugs.launchpad.net/python-mysqldb/+bug/341943
Jay Taylor
4
Zu Ihrer Information, wenn Sie nur die erste Zeile ausführen (mindestens mit py27-mysql), wird mysql5 trotzdem installiert. Durch Herunterladen und Kompilieren der Quelle. Wahrscheinlich nicht was du willst. Grr.
Ben Hardy
@BenHardy - es wird alles installiert, was Sie wollen und genau das, was ich meinte - auch jetzt werden die ausführbaren Dateien von Lion und Snow Leopard zentral von Macports erstellt, sodass in den meisten Fällen keine lokale Kompilierung durchgeführt wird.
mmmmmm
15

Installieren Sie pip:

sudo easy_install pip

Gebräu installieren:

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

Installieren Sie MySQL:

brew install mysql

Installieren Sie MySQLdb

sudo pip install MySQL-python

Wenn Sie Kompilierungsprobleme haben, versuchen Sie, die Datei ~ / .profile wie in einer der Antworten hier zu bearbeiten.

Ron Reiter
quelle
Vielen Dank! Dies funktionierte unter Sierra [OSX 10.12.6 (16G29)].
Haranadh
curl: (22) Die angeforderte URL hat den Fehler zurückgegeben: 404 Not Found
Thirupathi Thangavel
tat dies aber mit pip install mysqlclientstattdessen. Funktioniert!
Jeremysprofile
13

Hier ist ein weiterer Schritt, den ich durchlaufen musste, nachdem ich beim Abschluss von Schritt 9 einen Fehler erhalten hatte:

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

Hinweis: Danke! http://ageekstory.blogspot.com/2011_04_01_archive.html

Richard Boardman
quelle
4

Hatte gerade dieses Problem (wieder!), Nachdem ich eine neue Lion-Box bekommen hatte.

Beste Lösung, die ich gefunden habe (immer noch nicht 100% optimal, aber funktioniert):

Sie können es erhalten, indem Sie XCode / Dev Tools von Apple herunterladen - dies ist ein großer Download -

... aber stattdessen empfehle ich diesen Github, der das hat, was Sie brauchen (und keinen XCode hat): https://github.com/kennethreitz/osx-gcc-installer

Ich habe ihre vorgefertigte PKG für Lion heruntergeladen, https://github.com/downloads/kennethreitz/osx-gcc-installer/GCC-10.7-v2.pkg

  • Stellen Sie sicher, dass Sie eine 64-BIT-Version von MYSQL Community heruntergeladen haben. (Die DMG-Installation ist ein einfacher Weg) http://dev.mysql.com/downloads/mysql/

  • Stellen Sie die Pfade wie folgt ein:

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

    export DYLD_LIBRARY_PATH = / usr / local / mysql / lib /

    export ARCHFLAGS = '- arch x86_64'

BEACHTEN SIE, DASS:

1 in MySQL-XXXX oben ist XXX die spezifische Version, die Sie heruntergeladen haben. (Wahrscheinlich würde / usr / local / mysql / auch funktionieren, da dies höchstwahrscheinlich ein Alias ​​für dasselbe ist, aber ich werde nicht vorgeben, Ihr Setup zu kennen.)

2 Ich habe gesehen, dass ARCHFLAGS auf '-arch i386 -arch x86_64' gesetzt werden sollte, aber die Angabe von nur x86_64 schien für mich besser zu funktionieren. (Ich kann mir einige Gründe dafür vorstellen, aber sie sind nicht unbedingt relevant).

  • Installiere das Biest!

    easy_install MySQL-Python

  • LETZTER SCHRITT:

Fügen Sie dauerhaft den DYLD_LIBRARY_PATH hinzu!

Sie können es Ihrem bash_profile oder ähnlichem hinzufügen. Dies war der fehlende Schritt für mich, ohne den mein System weiterhin auf verschiedenen Fehlern bestand, die _mysql.so und so weiter fanden.

export DYLD_LIBRARY_PATH = / usr / local / mysql / lib /

@ richard-boardman, habe gerade Ihre Softlink-Lösung bemerkt, die möglicherweise genau das Gleiche tut wie meine PATH-Lösung ... Leute, was auch immer für Sie am besten funktioniert.

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

jsh
quelle
4

Sie könnten versuchen, die reine Python zu verwenden pymysql:

sudo easy_install pymysql

(Oder verwenden pipSie, wenn Sie es installiert haben.) Fügen Sie dies dann vor Ihnen import MySQLdbin Ihren Code ein:

try:
    import pymysql
    pymysql.install_as_MySQLdb()
except ImportError:
    pass
Collin Anderson
quelle
3

Oder einfach versuchen:

> sudo easy_install MySQL-python

Wenn es einen Fehler wie unten gibt:

EnvironmentError: mysql_config nicht gefunden

, dann führen Sie dies einfach aus

> export PATH=$PATH:/usr/local/mysql/bin
Shashank Agarwal
quelle
0

Wenn Sie 64-Bit-MySQL verwenden, reicht es aus, ARCHFLAGS zu verwenden, um Ihre CPU-Architektur beim Erstellen von MySQL-Python-Bibliotheken anzugeben:

ARCHFLAGS='-arch x86_64' python setup.py build
ARCHFLAGS='-arch x86_64' python setup.py install
Shan Valleru
quelle
0
export PATH=$PATH:/usr/local/mysql/bin/

sollte das Problem für Sie beheben, da das System die Datei mysql_config nicht finden kann.

Varun Bhatia
quelle
0

Auf MacOS Sierra funktioniert diese Arbeit für mich, wo Python von Anaconda verwaltet wird:

anaconda search -t conda mysql-python

anaconda show CEFCA/mysql-python

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

Die mit SQLAlchemy zu verwenden:

Python 2.7.13 | Continuum Analytics, Inc. | (Standard, 20. Dezember 2016, 23:05:08) [GCC 4.2.1 Kompatibles Apple LLVM 6.0 (clang-600.0.57)] auf Darwin Geben Sie "help", "copyright", "Credits" oder "Lizenz" ein, um weitere Informationen zu erhalten Information. Anaconda wird Ihnen von Continuum Analytics zur Verfügung gestellt. Bitte überprüfen Sie: http://continuum.io/thanks und https://anaconda.org

>>> aus sqlalchemy import *

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

sAguinaga
quelle
0

Diese Antwort ist ein Update, ca. November 2019. Keine der gängigen Pip-Installationen bietet Ihnen ein funktionierendes Setup für MacOS 10.13 (und wahrscheinlich auch für andere Versionen). Hier ist eine einfache Möglichkeit, wie ich Dinge zum Laufen bringen kann:

brew install mysql
pip install mysqlclient

Wenn Sie Hilfe bei der Installation von Brew benötigen, besuchen Sie diese Website: https://brew.sh/

isst Essen
quelle
0

Ich bin auf dieses Problem mysqlclientgestoßen und habe festgestellt, dass ich wissen muss, wo openssl zu finden ist, und OSX verbirgt dies standardmäßig.

Suchen Sie openssl mit brew info opensslund fügen Sie dann den Pfad zu Ihrem opensslBin zu Ihrem PFAD hinzu:

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

Ich empfehle, dies zu Ihrer .zshrc oder .bashrc hinzuzufügen, damit Sie sich in Zukunft keine Sorgen mehr machen müssen. Fügen Sie dann mit dieser exportierten Variablen (die möglicherweise zum Schließen und erneuten Öffnen Ihrer Bash-Sitzung führt) zwei weitere env-Variablen hinzu:

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

Dann endlich laufen:

pipenv install mysqlclient

und es sollte gut installieren.

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

Elliot Plant
quelle