Ich habe gerade mysqldb für Python 2.7 auf meinem Mac OS 10.6 kompiliert und installiert. Ich habe eine einfache Testdatei erstellt, die importiert wird
import MySQLdb as mysql
Erstens ist dieser Befehl rot unterstrichen und die Info sagt mir "Ungelöster Import". Dann habe ich versucht, den folgenden einfachen Python-Code auszuführen
import MySQLdb as mysql
def main():
conn = mysql.connect( charset="utf8", use_unicode=True, host="localhost",user="root", passwd="",db="" )
if __name__ == '__main__'():
main()
Bei der Ausführung wird die folgende Fehlermeldung angezeigt
Traceback (most recent call last):
File "/path/to/project/Python/src/cvdv/TestMySQLdb.py", line 4, in <module>
import MySQLdb as mysql
File "build/bdist.macosx-10.6-intel/egg/MySQLdb/__init__.py", line 19, in <module>
\namespace cvdv
File "build/bdist.macosx-10.6-intel/egg/_mysql.py", line 7, in <module>
File "build/bdist.macosx-10.6-intel/egg/_mysql.py", line 6, in __bootstrap__
ImportError: dlopen(/Users/toom/.python-eggs/MySQL_python-1.2.3-py2.7-macosx-10.6-intel.egg-tmp/_mysql.so, 2): Library not loaded: libmysqlclient.18.dylib
Referenced from: /Users/toom/.python-eggs/MySQL_python-1.2.3-py2.7-macosx-10.6-intel.egg-tmp/_mysql.so
Reason: image not found
Was könnte die Lösung für mein Problem sein?
EDIT: Eigentlich habe ich herausgefunden, dass die Bibliothek in / usr / local / mysql / lib liegt. Also muss ich meiner Pydev-Eclipse-Version mitteilen, wo sie zu finden ist. Wo stelle ich das ein?
quelle
sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib
mysql55
über MacPorts installiert und um diesen Fehler zusudo ln -s mysql/libmysqlclient.18.dylib /opt/local/lib/mysql55/libmysqlclient.18.dylib
sudo ln -s /usr/local/mysql-5.5.29-osx10.6-x86_64/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib
Meine bevorzugte Methode besteht darin, die Bibliothek tatsächlich zu reparieren, anstatt mit Umgebungsvariablen zu spielen, die je nach Ausführung der Anwendung möglicherweise tatsächlich im Gültigkeitsbereich liegen oder nicht. Dies ist eigentlich ein ziemlich einfacher Prozess.
Sehen Sie sich zunächst die Fehlerausgabe an, um festzustellen, wo sich das fehlerhafte Python-Modul befindet:
Okay, die fehlerhafte Datei lautet /Library/Python/2.7/site-packages/_mysql.so
Als nächstes finden Sie heraus, wo _mysql.so meint, es sollte libmysqlclient.18.dylib finden:
Es wird also nach libmysqlclient.18.dylib ohne Pfadinformationen gesucht. Lassen Sie uns das beheben:
Jetzt kennt _mysql.so den vollständigen Pfad zur Bibliothek und alles funktioniert, unabhängig von Umgebungsvariablen.
quelle
Ich fand, dass es eine andere Lösung für dieses Problem gab, anstatt eine symbolische Verknüpfung zu erstellen.
Sie legen den Pfad zu Ihrem Verzeichnis, in dem sich libmysqlclient.18.dylib befindet, auf die Umgebungsvariable DYLD_LIBRARY_PATH fest. Ich habe folgende Zeile in mein .bash_profile eingefügt:
Das ist es.
quelle
In meinem Fall wurde der Fehler mit Mac OS X 10.9 Mavericks angezeigt. Ich habe MySQL Community Server direkt von der Oracle / MySQL-Website von DMG installiert.
Alles, was ich tun musste, war, die lib-Dateien mit dem Verzeichnis / usr / local / lib zu verknüpfen.
Bonus: Wenn Sie auch Mac OS X ausführen, gibt es ein großartiges Tool zum Auffinden von Dateien wie der libmysqlclient.18.dylib-Datei http://apps.tempel.org/FindAnyFile . So habe ich ursprünglich den Speicherort der Dylib-Datei gefunden.
quelle
/usr/local/lib
Verzeichnis erstellen , arbeitete aber wie ein Zauber!Ich fand, dass das Einfügen in Ihr .profile oder .bashrc (je nachdem, was Sie verwenden) der einfachste Weg ist. Sym-Links sind unübersichtlich im Vergleich zum Speichern von Pfaden in Ihren Quelldateien.
Im Vergleich zur Antwort von yoshisurfs sollte das mysql-Verzeichnis die meiste Zeit, wenn mysql installiert wird, aus Gründen der Benutzerfreundlichkeit nur in mysql und nicht in den gesamten Dateinamen umbenannt werden.
quelle
Ich bin mit ein paar virtuellen Umgebungen darauf gestoßen.
Arbeitete beide Male.
quelle
Im Pydev Eclipse-Plugin möchten Sie möglicherweise die Umgebungsvariable für DYLD festlegen. Der Pfad kann wie in eingestellt werden
Installieren Sie mysqldb auf Schneeleoparden
quelle
Für diejenigen, die Homebrew verwenden, können Sie dies beheben mit:
quelle
In meinem Fall muss ich in El Capitan (OSX 10.11) Folgendes tun
~/.bash_profile
quelle
Wenn Sie in El Capitan sind, wird eine Fehlermeldung angezeigt: Sie
ln: /usr/lib/libmysqlclient.18.dylib: Operation not permitted
müssen den "System Integrity Protection" schließen.Starten Sie zuerst neu und halten Sie cmd + R gedrückt, um in den Wiederherstellungsmodus zu wechseln. Starten Sie dann das Terminal und geben Sie den Befehl ein:
csrutil disable
Jetzt können Sie neu starten und es erneut versuchen.quelle
libmysqlclient.18.dylib
zu verschieben/usr/local/lib
und einen PfadPATH=/usr/local/lib:$PATH
zu bash_profile hinzuzufügen. Es funktioniert für mich.Bei einer neuen El Capitan-Installation, bei der SIP (rootless verhindert den Zugriff auf usr / lib /) standardmäßig aktiviert ist und Sie den Symlink nur erstellen können, wenn Sie sich im Wiederherstellungsmodus befinden. Wie @yannisxu sagte, können Sie SIP deaktivieren und Ihren Symlink zu / usr / lib / local erstellen, und dies wird funktionieren.
Sie können den folgenden Befehl unter MAC OSX El Capitan verwenden, anstatt SIP auszuschalten:
Früher gab es eine Option, bei der Sie sich als Root anmelden und dadurch SIP deaktivieren können. In der endgültigen Version, die jetzt veraltet ist, können Sie hier mehr darüber lesen: https://forums.developer.apple.com/thread/4686
Frage:
In Developer Beta 1 ist ein Befehl nvram boot-args verfügbar, mit dem SIP deaktiviert werden kann, wenn es mit Root-Rechten ausgeführt wird:
Wird diese Option zum Deaktivieren von SIP auch in der El Capitan-Release-Version verfügbar sein? Oder ist dies ausschließlich für die Developer Builds?
Antworten:
Dieser Befehl nvram boot-args wird gelöscht. Es wird in der El Capitan-Release-Version nicht verfügbar sein und möglicherweise vor dem Ende der Entwickler-Betas verschwinden. Behalten Sie die Versionshinweise für zukünftige Entwickler-Betas im Auge.
quelle
Ich hatte dieses Problem und es dauerte eine Weile, bis ich herausgefunden hatte, wie ich das beheben konnte.
Mein Fall ist etwas anders. Mein MySQL-Server hat die Version 5.1.x. Und irgendwie habe ich mein MySQL-Python von 1.2.3 auf 1.2.5 aktualisiert. Und seitdem habe ich dieses Problem immer wieder bekommen, obwohl ich den folgenden Softlink hinzugefügt habe.
Es stellt sich heraus, dass es für MySQL 5.1.x keine libmysqlclient.18.dylib gibt, sondern nur libmysqlclient.16.dylib. Sie können dieses Problem beheben, indem Sie entweder Ihr MySQL-Python auf 1.2.3 herunterstufen oder Ihren MySQL-Server auf 5.6.x aktualisieren (ich habe 5.5.x nicht ausprobiert).
Ich habe die Bibliothek auf 1.2.3 heruntergestuft, da ein Upgrade von MySQL für mich keine Option ist.
quelle
Gehen Sie zu http://dev.mysql.com/downloads/connector/c/ und laden Sie MySQL Connector / C herunter. Nachdem Sie das Paket erhalten haben, erstellen Sie ein neues Verzeichnis 'mysql', dekomprimieren Sie die Mysql Connector-Datei unter dem Verzeichnis mysql und erstellen Sie dann unter mysql ein weiteres leeres Verzeichnis 'build'. Wir verwenden 'build', um MySQL Connector / C zu erstellen. cd build && cmake ../your-MySQL-Connector-source-dir make && make install nach make install erhalten Sie ein Verzeichnis mit dem Namen mysql unter / usr / local. Es enthält alle Header und Bibliotheken, die Sie benötigen. Gehen Sie in dieses Verzeichnis und kopieren Sie die Header und Bibliotheken an die entsprechenden Speicherorte.
quelle
Du kannst es versuchen:
quelle
Hinweis zum Fehler von MySQL Connector / C unter macOS (meine aktuelle Version ist 10.13.2), beheben Sie die mysql_config und installieren Sie mysqlclient oder MySQL-python neu. Hier ist das Detail
quelle