Python: MySQLdb et “la Bibliothèque n'est pas chargé: libmysqlclient.16.dylib”
L'installation...
Essayer de mettre en place un nettoyage Mac os X 10.6 installer à développer en python/django et je ne me souviens pas de courir dans ce 10.5.
Après l'installation de MySQL à partir de l'installateur sur mysql-5.5.8-osx10.6-x86_64.dmg
j'ai couru
$ sudo pip install MySQL-python
et il semblait aller facilement (sortie ci-dessous)
Downloading/unpacking MySQL-python
Downloading MySQL-python-1.2.3.tar.gz (70Kb): 70Kb downloaded
Running setup.py egg_info for package MySQL-python
warning: no files found matching 'MANIFEST'
warning: no files found matching 'ChangeLog'
warning: no files found matching 'GPL'
Installing collected packages: MySQL-python
Running setup.py install for MySQL-python
building '_mysql' extension
gcc-4.2 -fno-strict-aliasing -fno-common -dynamic -DNDEBUG -g -fwrapv -Os -Wall -Wstrict-prototypes -DENABLE_DTRACE -pipe -Dversion_info=(1,2,3,'final',0) -D__version__=1.2.3 -I/usr/local/mysql/include -I/System/Library/Frameworks/Python.framework/Versions/2.6/include/python2.6 -c _mysql.c -o build/temp.macosx-10.6-universal-2.6/_mysql.o -Os -g -fno-common -fno-strict-aliasing -arch x86_64
In file included from _mysql.c:36:
/usr/local/mysql/include/my_config.h:325:1: warning: "SIZEOF_SIZE_T" redefined
In file included from /System/Library/Frameworks/Python.framework/Versions/2.6/include/python2.6/Python.h:9,
from pymemcompat.h:10,
from _mysql.c:29:
/System/Library/Frameworks/Python.framework/Versions/2.6/include/python2.6/pymacconfig.h:33:1: warning: this is the location of the previous definition
In file included from _mysql.c:36:
/usr/local/mysql/include/my_config.h:419:1: warning: "HAVE_WCSCOLL" redefined
In file included from /System/Library/Frameworks/Python.framework/Versions/2.6/include/python2.6/Python.h:8,
from pymemcompat.h:10,
from _mysql.c:29:
/System/Library/Frameworks/Python.framework/Versions/2.6/include/python2.6/pyconfig.h:803:1: warning: this is the location of the previous definition
gcc-4.2 -Wl,-F. -bundle -undefined dynamic_lookup build/temp.macosx-10.6-universal-2.6/_mysql.o -L/usr/local/mysql/lib -lmysqlclient_r -lpthread -o build/lib.macosx-10.6-universal-2.6/_mysql.so -arch x86_64
warning: no files found matching 'MANIFEST'
warning: no files found matching 'ChangeLog'
warning: no files found matching 'GPL'
Successfully installed MySQL-python
Cleaning up...
après ce que j'ai essayé:
$ python -c "import MySQLdb"
et il a chié sur moi avec:
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/Library/Python/2.6/site-packages/MySQLdb/__init__.py", line 19, in <module>
import _mysql
ImportError: dlopen(/Library/Python/2.6/site-packages/_mysql.so, 2): Library not loaded: libmysqlclient.16.dylib
Referenced from: /Library/Python/2.6/site-packages/_mysql.so
Reason: image not found
Donc à ma question...
Qu'ai-je fait de mal?/De quoi dois-je faire?
Googler (et la recherche), pour cela renvoie beaucoup de résultats de recevoir ce message d'erreur avec Ruby pas trop avec Python tho.
- utilisation libmysqlclient.16.dylib 10,5 à la place
Vous devez vous connecter pour publier un commentaire.
_mysql.so
se réfère àlibmysqlclient.16.dylib
. Qui est, la bibliothèque partagée qui sert de pont entre Python et la bibliothèque cliente MySQL,_mysql.so
, se réfère à la dynamique de la bibliothèque de la bibliothèque cliente MySQL, et que la bibliothèque ne peut pas être chargé pour une raison quelconque.Questions auxquelles vous devez répondre:
libmysqlclient.16.dylib
n'importe où sur votre système? Si non, vous devez installerle client MySQL logiciel.
DYLD_LIBRARY_PATH
paramètre? Si pas,essayez de l'ajouter.
libmysqlclient.16.dylib
fichier n'est pas corrompu. Moncopie, installé dans
/opt/local/lib/mysql5/mysql/libmysqlclient.16.dylib
, avec l'aimable autorisation deMacPorts, a MD5 signature
c79ee91af08057dfc269ee212915801a
et est 1,462,376 octets la taille. Quel est votre copie ressembler?dyld
(man dyld
), et de regarder la documentationDYLD_LIBRARY_PATH
.export DYLD_LIBRARY_PATH=/usr/local/mysql/lib:$DYLD_LIBRARY_PATH
. N'a jamais eu à le faire dans les installations précédentes. Je déteste la façon dont l'ancien et maladroit, ce package.bash
), shell variables sont locales par défaut, c'est qu'ils ne sont pas mis dans l'environnement, mais a gardé locales au processus. Leexport
mot-clé marque une variable "exportés à l'environnement". Ainsi, l'éditeur de liens (un sous-processus de la coquille) peut effectivement voir la variable. Tout simplement la mise en DYLD_LIBRARY_PATH, sans l'exporter, signifie qu'il est seulement local pour que shell et, par conséquent, aucune aide dans la résolution de ce problème.locate libmysqlclient.16.dylib /usr/lib/libmysqlclient.16.dylib /usr/local/Cellar/mysql51/5.1.71/lib/mysql/libmysqlclient.16.dylib
Il suffit de régler le
DYLD_LIBRARY_PATH
après l'exécution depip install
oueasy_install
:Devrait faire le travail en supposant que votre installation de MySQL vit sous
/usr/local/mysql
.virtualenv
vous pourriez définir/annuler dans votrebin/activate
script, sinon je le recommande~/.bash_profile
.which mysql /usr/local/bin/mysql
donc mon chemin doit êtreexport DYLD_LIBRARY_PATH=/usr/local/bin/mysql
droit?ls -l `which mysql`
et plus vous aurez de chances de trouver un lib dossier là comme/usr/local/mysql/lib/
Après easy_install, j'ai créer un doux lien qui a résolu le problème
Il peut également survenir si votre client MySQL est plus récente que votre MySQL-python package. Dans mon cas, j'ai eu un libmysqlclient_r.18.dylib sur ma machine, mais pas un libmysqlclient_r.16.dylib. L'exécution de
pip search mysql
a révéléet en cours d'exécution
pip install --upgrade MySQL-python
fixe mon problème.pip uninstall MySQL-python && pip install MySQL-python
semble fonctionner aussi bien.Sur la dernière version de MySQL 5.7.9 c'est pas de l'appui de
MySQL-python
et j'ai utilisé lePyMySQL
de la bibliothèque de la place. Aussi j'ai ajouté dansmanage.py
(en projet Django) de ces lignes pour émuler l'API MySQL-python:Sur ma configuration (mysql 5.7.x de bière, pyenv), j'ai eu un nouveau fichier lib
libmysqlclient.20.dylib
. Ce qui a fonctionné a été àpip uninstall MySQL-python
etpip install MySQL-python
.pip --no-cache-dir install MySQL-python
dans le cas où il y a le cache.Pour ceux comme moi qui ont besoin ou ont - à la fois MySQLdb & PyMySQL installé (dans mon cas, j'avais besoin d'avoir à la fois installés parce que je utiliser PyMySQL pour se connecter à mon MySQL local instances, et MySQLDb à distance/en direct des instances):
Assurez-vous d'utiliser le bon schéma d'URI. Pour accéder aux instances locales:
et pour vivre:
Faire cette distinction a résolu le problème pour moi