Estoy empezando el camino de aprendizaje de Python/Django y han golpeado mi primer problema. Al intentar establecer mi base de datos en settings.py, el servidor interno falla con:

File "/Library/Python/2.7/site-packages/django/db/backends/mysql/base.py", line 16, in <module>
raise ImproperlyConfigured("Error loading MySQLdb module: %s" % e)
django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module: dlopen(/Users/rob/.python-eggs/MySQL_python-1.2.3-py2.7-macosx-10.7-intel.egg-tmp/_mysql.so, 2): Library not loaded: libmysqlclient.18.dylib
Referenced from: /Users/rob/.python-eggs/MySQL_python-1.2.3-py2.7-macosx-10.7-intel.egg-tmp/_mysql.so
Reason: image not found

Hay un montón de soluciones que he encontrado, en su mayoría implican la definición explícita de mi DYLD_LIBRARY_PATH de valor, pero que no funciona para mí. MysQL-Python está instalado (v1.2.3).

Alguna idea de lo que necesite hacer para empujar a través de este?

Gracias.

ACTUALIZACIÓN

DATABASES = {
  'default': {
    'ENGINE': 'django.db.backends.mysql',  # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
    'NAME': 'django_tutorial',                      # Or path to database file if using sqlite3.
    'USER': 'root',                      # Not used with sqlite3.
    'PASSWORD': '',                  # Not used with sqlite3.
    'HOST': '',                      # Set to empty string for localhost. Not used with sqlite3.
    'PORT': '',                      # Set to empty string for default. Not used with sqlite3.
  }
}
  • para OSX, como práctica general, yo te recomiendo usar el PyPM gestor de paquetes & repositorio de ActiveState. He utilizado: ‘sudo pypm install mysql-python’ y (casi) nunca ha tenido un problema con los paquetes
  • Si estás tratando de aprender Django, podría ser ventajoso para empezar con sólo el uso de SQLite. Empiezo todos mis proyectos en SQLite, a continuación, migrar a un real DB como sea necesario.
  • Oprea – yo he usado tanto pip y easy_install, para comprobar que el paquete MySQL. MySQL sí está funcionando bien para ambos, Ruby y PHP dev en la misma máquina.
  • Kocheran – tal vez, pero yo ya estoy familiarizado con MySQL y sé que voy a utilizar o PGSQL en la naturaleza, así que me imagino que bien podría trabajar a través de los dolores de crecimiento ahora. 🙂
  • Duplicado de stackoverflow.com/questions/4730787/…
  • Hey, Ned-me hizo ver su respuesta por allí, pero que la solución no parece solucionar mi problema (o yo estoy entendiendo). El otool comando muestra el mismo archivo lib (libmysqlclient.18.dylib) en ambos casos. Realmente me gustaría usar mi servidor MySQL en lugar de instalar una nueva, así que pensé (lea: la esperanza) de que podría ser una más de la solución actual.
  • Qué muestra exactamente la misma ruta de acceso para cada una de ellas líder /?
  • Bueno, ahora que lo ponen de esa manera…no. No se no se. $ otool -DX /usr/local/mysql/lib/libmysqlclient.18.dylib –> libmysqlclient.18.dylib. otool -L ~/.python-eggs/MySQL_python-1.2.3-py2.7-macosx-10.7-intel.egg-tmp/_mysql.so –> /Users/rob/.python-eggs/MySQL_python-1.2.3-py2.7-macosx-10.7-intel.egg-tmp/_mysql.so: libmysqlclient.18.dylib (compatibility version 18.0.0, current version 18.0.0) /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 159.1.0)
  • Gotcha. No sabía lo que era el objetivo, si es para aprender Django, tomar el pasado de menos resistencia en lo que le permite obtener acceso a la Api.

6 Comentarios

  1. 37

    De sus comentarios, parece que la libmysqlclient dylib fue instalado con un no absoluto de la biblioteca de el nombre de ruta de acceso. Eso es contrario a la práctica habitual en OS X, la cual es diferente de la mayoría de los otros Unix y sistemas en este sentido. Usted debe ser capaz de permanentemente solucionar el problema (al menos hasta la próxima actualización) mediante la modificación de la ruta de acceso en el .así de archivos mediante el uso de install_name_tool o usted puede hacer el trabajo por garantizar su Django instancia se está ejecutando con la siguiente variable de entorno definidas:

    export DYLD_LIBRARY_PATH=/usr/local/mysql/lib

    También podría ser capaz de llegar a trabajar por la creación de un enlace simbólico en /usr/local/lib a la dylib en /usr/local/mysql/lib desde /usr/local/lib es el valor predeterminado de carga dinámica de búsqueda de la ruta, por lo que (no probado!) algo así como:

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

    Una mejor solución a largo plazo es no utilizar un roto cliente de MySQL instalación como se sugiere en Python import MySQLdb error – Mac 10.6.

    • Configuración de la ruta de la biblioteca no parece funcionar para mí. Yo era reacia a utilizar install_name_tool porque sonaba…destructivo, pero tal vez ese es mi única esperanza, si quiero usar mi existentes, instalación binaria de MySQL (y que sería preferible). Gracias.
    • El enlace simbólico trabajado (y se siente menos destructivo para mí), así que es como yo estoy rodando ahora. Gracias por hacerme sobre este particular joroba.
    • funciona con –> sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/local/lib/libmysqlclient.18.dylib
    • Guarda mi @$$. Gracias!
    • Brava respuesta. Guardar mi tiempo.
    • Gracias por darse cuenta de la errata! Lo siento, su propuesta de editar ya había sido rechazada por el tiempo que la vi.
    • GRACIAS! Crear el enlace simbólico trabajado para mí, pero yo soy la instalación de mysql-simple en Haskell. Tenía el mismo problema, la imagen no se encuentra.

  2. 2

    El uso de un homebrew instalación de mysql, esto funcionó para mí:

    $ mdfind libmysqlclient
    /usr/local/Cellar/mysql/5.7.9/lib/libmysqlclient.20.dylib
    /usr/local/Cellar/mysql/5.7.9/lib/libmysqlclient.a
    /usr/local/Cellar/mysql/5.6.27/lib/libmysqlclient.18.dylib
    /usr/local/Cellar/mysql/5.6.27/lib/libmysqlclient.a
    /usr/local/Cellar/mysql/5.6.26/lib/libmysqlclient.18.dylib
    /usr/local/Cellar/mysql/5.6.26/lib/libmysqlclient.a
    
    $ sudo ln -s /usr/local/Cellar/mysql/5.6.27/lib/libmysqlclient.18.dylib /usr/local/lib/libmysqlclient.18.dylib
  3. 1

    Asegúrese de que usted no acaba de MySql-Python, pero el real MySql. MySQL-python está tratando de cargar la librería de mysql, que debería estar en algún lugar como /usr/local/mysql-VERSION/lib.

    Intente ejecutar

    mdfind libmysqlclient

    en la línea de comandos. Escanear a través de esos resultados, y si no ve el archivo que falta (libmysqlclient.18.dylib), entonces usted probablemente no tiene instalado mysql correctamente.

    • MySQL se está ejecutando correctamente para Ruby/PHP dev y el comando que se muestra en la biblioteca de mi mysql/lib camino. Gracias.
  4. 1

    Usted probablemente ha actualizado mysql recientemente. Tengo este problema cuando he actualizado a MySql 5.6 5.7 con cerveza. Esto definitivamente se rompió algunas libs, pero de volver a vincular a mysql de nuevo a 5.6 solucionado el problema.
    Así que primero ver qué versión de mysql que había previamente con:
    brew info mysql y después de volver a esa versión, con brew switch mysql 5.6.22 comando, por ejemplo.

  5. 0

    No tengo suficiente reputación para comentar sobre Ned Deily la respuesta de arriba :), pero la variable de entorno método ha funcionado para mí, después de corregir el error; debe ser:

    export DYLD_LIBRARY_PATH=/usr/local/mysql/lib

    Si ir por ese camino yo sugeriría dos cosas; asegúrese de no golpear a cualquier otro DYLD_LIBRARY_PATH la configuración mediante

    export DYLD_LIBRARY_PATH=$DYLD_LIBARY_PATH:/usr/local/mysql/lib

    y la puso en su .bashrc archivo de modo que usted no tiene que recordar para establecer en cada sesión de terminal.

    La ventaja de este método sobre el enlace simbólico opción es que va a permitir que todos los de mysql dylib archivos que se encuentran, no sólo a la(s) que usted específicamente enlace simbólico.

Dejar respuesta

Please enter your comment!
Please enter your name here