Python mysqldb: la Bibliothèque n'est pas chargé: libmysqlclient.18.dylib
J'ai juste compilé et installé mysqldb pour python 2.7 sur mon mac os 10.6. J'ai créé un simple fichier de test que les importations
import MySQLdb as mysql
Tout d'abord, cette commande est souligné rouge et l'info me dit "non résolus à l'importation". Alors j'ai essayé d'exécuter le simple suivant du code python
import MySQLdb as mysql
def main():
conn = mysql.connect( charset="utf8", use_unicode=True, host="localhost",user="root", passwd="",db="" )
if __name__ == '__main__'():
main()
Lors de l'exécution, je reçois le message d'erreur suivant
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
Ce qui pourrait être la solution à mon problème?
EDIT:
En fait j'ai trouvé que la bibliothèque se trouve dans /usr/local/mysql/lib. Donc j'ai besoin de raconter mon pydev eclipse version où le trouver. Où puis-je le régler?
Vous devez vous connecter pour publier un commentaire.
J'ai résolu le problème en créant un lien symbolique vers la bibliothèque. I. e.
La bibliothèque réelle réside dans
Et puis j'ai créé un lien symbolique dans
À l'aide de la commande:
de sorte que j'ai le mappage suivant:
Qu'il a été. Après que tout a bien fonctionné.
EDIT:
Avis, que depuis MacOS El Capitan le Système de Protection de l'Intégrité (SIP, aussi connu comme "sans racine") va vous empêcher de créer des liens dans
/usr/lib/
.Vous pouvez désactiver le protocole SIP, en suivant ces instructions, mais vous pouvez créer un lien dans
/usr/local/lib/
à la place:sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib
mysql55
via MacPorts et pour résoudre cette erreur n':sudo 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
sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/local/lib/libmysqlclient.18.dylib
Ma méthode préférée est de fixer la bibliothèque, plutôt que de jouer avec les variables d'environnement qui peuvent ou peuvent ne pas être portée en fonction de la façon dont l'application est exécutée. C'est en fait un processus assez simple.
Tout d'abord, regardez la sortie d'erreur pour voir le lieu où l'infraction module python est situé:
Ok, donc la délinquance fichier /Bibliothèque/Python/2.7/site-packages/_mysql.donc
Ensuite, la figure où _mysql.donc pense qu'il devrait trouver libmysqlclient.18.dylib:
Donc, il est à la recherche de libmysqlclient.18.dylib avec aucune information sur le chemin, nous allons corriger cela:
Maintenant _mysql.sait si le chemin d'accès complet à la bibliothèque et tout fonctionne, indépendamment des variables d'environnement.
J'ai trouvé qu'il y avait une autre solution pour ce problème plutôt que de créer un lien symbolique.
Vous définissez le chemin d'accès à votre répertoire, où libmysqlclient.18.dylib réside, pour DYLD_LIBRARY_PATH variable d'environnement. Ce que j'ai fait est de mettre la ligne suivante dans mon .bash_profile:
Que c'est.
Dans mon cas, j'ai été l'obtention de l'erreur avec Mac OS X 10.9 Mavericks. J'ai installé MySQL Community Server directement à partir de l'Oracle/MySQL du Site web de DMG.
Tout ce que j'avais à faire était de lien symbolique les fichiers lib dans le répertoire /usr/local/lib.
Bonus: Si vous utilisez Mac OS X, il est un excellent outil pour trouver des fichiers comme le libmysqlclient.18.dylib fichier, http://apps.tempel.org/FindAnyFile. C'est la façon dont je l'ai d'abord trouvé l'emplacement de la dylib fichier.
/usr/local/lib
répertoire, mais il a travaillé comme un charme!J'ai trouvé la mise en votre .de profil ou de .bashrc (selon votre utilisation) est la façon la plus simple de le faire, sym liens sont en désordre, comparativement à maintenir les chemins dans vos fichiers source.
Aussi par rapport à yoshisurfs réponse, la plupart du temps lorsque mysql est installé mysql répertoire devrait être renommé à juste mysql, pas l'ensemble du nom de fichier, pour la facilité d'utilisation.
J'ai couru avec un couple d'environnements virtuels.
Travaillé deux fois.
Dans pydev plug-in eclipse, vous pouvez définir la variable d'environnement pour DYLD. Le chemin d'accès peut être défini comme le montre
Installer mysqldb sur snow leopard
Pour ceux qui utilisent homebrew vous pouvez corriger cela avec:
lorsque vous êtes à El Capitan, obtiendrez une erreur:
ln: /usr/lib/libmysqlclient.18.dylib: Operation not permitted
besoin de fermer le "Système de Protection de l'Intégrité".
abord, redémarrer et maintenez le doigt sur cmd + R pour entrer dans le mode de Récupération, puis lancez le terminal et tapez la commande:
csrutil disable
, vous pouvez maintenant redémarrer et essayer de nouveau.libmysqlclient.18.dylib
à/usr/local/lib
et ajouter le cheminPATH=/usr/local/lib:$PATH
à bash_profile. C'est de travailler pour moi.Sur les nouveaux El Capitan installation où SIP(sans racine empêche l'accès à l'usr/lib/) est activée par défaut et vous ne pouvez pas créer le lien symbolique, sauf si vous êtes en mode de récupération. Comme @yannisxu dit que vous pouvez désactiver les SIP et de faire de votre lien symbolique vers /usr/lib/locale et que cela fonctionne.
vous pouvez utiliser la commande suivante sur MAC OSX El Capitan au lieu de désactiver SIP:
Il y avait une option où vous pouvez vous connecter en tant que root, ce qui peut désactiver SIP, mais dans la version finale qui est obsolète maintenant, vous pouvez lire plus à ce sujet ici: https://forums.developer.apple.com/thread/4686
Question:
Il y a une nvram boot-args commande disponible en Developer Bêta 1 qui peut désactiver le SIP lorsqu'il est exécuté avec des privilèges root:
Cette option de désactivation de la SIP également être disponible dans le El Capitan version? Ou est-ce strictement pour les versions en développement?
Réponse:
Ce nvram boot-args commande va aller loin. Il ne sera pas disponible dans le El Capitan version et peut disparaître avant la fin du Développeur Bêtas. Gardez un œil sur les notes de version pour les futurs Développeurs Bêtas.
Dans mon Cas, dans El Capitan (OS x 10.11), j'ai à faire à la suite de
~/.bash_profile
J'ai eu ce problème et il m'a fallu un moment pour comprendre comment résoudre ce problème.
Mon cas est légèrement différent. Mon serveur MySQL est de la version 5.1.x. Et en quelque sorte j'ai mis à jour mon MySQL-python à partir de 1.2.3 à 1.2.5. Et j'ai continué à obtenir de cette question depuis l'événement, j'ai ajouté les éléments suivants doux lien.
Il s'avère que pour MySQL 5.1.x il n'y a pas de libmysqlclient.18.dylib, mais seulement libmysqlclient.16.dylib. Vous pouvez corriger ce problème, soit en downgrade de votre serveur MySQL-python à 1.2.3 ou la mise à niveau de votre serveur MySQL 5.6.x (je n'ai pas essayé 5.5.x.)
J'ai rétrogradé à la bibliothèque de 1.2.3 depuis la mise à niveau de MySQL n'est pas une option pour moi.
aller à http://dev.mysql.com/downloads/connector/c/ et télécharger MySQL Connector/C.
après avoir reçu le paquet, un nouveau répertoire 'mysql', décompressez le Mysql Connector fichier sous le répertoire mysql, puis sous mysql, faire un autre répertoire vide 'build'.nous allons utiliser la "construction" de construire MySQL Connector/C.
cd build && cmake ../votre-MySQL-Connector-source-dir
faire && make install
après l'installation, vous obtiendrez un répertoire nommé mysql dans /usr/local. il contient tous les en-têtes et les bibliothèques dont vous avez besoin.accédez à ce répertoire, et copiez les en-têtes et les bibliothèques aux emplacements correspondants.
vous pouvez essayer:
Remarque à propos du bug de MySQL Connector/C sur macOS (ma version actuelle est 10.13.2), fixer le mysql_config et réinstaller mysqlclient ou MySQL-python, voici le détail