Psycopg2 imagen no encontrada

Intentando configurar postgres con la aplicación mac de postgres y acertar este error, que no he podido resolver. ¿Alguna idea?

ImportError: dlopen(/Users/Craig/pyenv/mysite/lib/python2.7/site-packages/psycopg2/_psycopg.so, 2): Library not loaded: @executable_path/../lib/libssl.1.0.0.dylib Referenced from: /Applications/Postgres.app/Contents/MacOS/lib/libpq.dylib Reason: image not found 

 $ sudo ln -s /Library/PostgreSQL/9.2/lib/libssl.1.0.0.dylib /usr/lib $ sudo ln -s /Library/PostgreSQL/9.2/lib/libcrypto.1.0.0.dylib /usr/lib 

Encontré este error mientras trabajaba en Django. Lo tengo trabajando en virtualenv con Django == 1.3 pero no en Django == 1.5, donde tengo que emitir los comandos anteriores.

En OS X El Capitan no puede hacer estos enlaces sin deshabilitar la protección del sistema, pero funciona bien si vincula a / usr / local / lib

Encontré una solución que funcionó para mí al tratar un problema similar en los Rails. Agregue lo siguiente a su .bash_profile, .bash_rc, o equivalente:

 export DYLD_FALLBACK_LIBRARY_PATH=/Applications/Postgres.app/Contents/MacOS/lib:$DYLD_LIBRARY_PATH 

(Suponiendo que instaló Postgres.app en la ubicación predeterminada). Luego reinicie su sesión de terminal y vuelva a intentarlo.

Exportar a DYLD_LIBRARY_PATH directamente puede causar problemas serios con otras aplicaciones que dependen de él, pero el uso de la ruta alternativa evita estos problemas.

Consulte también: https://github.com/PostgresApp/PostgresApp/issues/109#issuecomment-18387546

EDITAR : Parece que la configuración DYLD_FALLBACK_LIBRARY_PATH causa un error cuando intenta ejecutar psql. Para solucionar este problema, puede agregar las siguientes dos líneas a su perfil de .bash:

 alias psql="(. ~/.bash_profile; unset DYLD_FALLBACK_LIBRARY_PATH; psql)"; 

Esto es asumiendo que estás usando bash y que tu .bash_profile está ubicado en tu directorio de inicio. Si ese no es el caso (o si está utilizando un .bashrc u otra configuración del entorno en lugar de .bash_profile), cambie la parte ~/.bash_profile parte del comando a la ruta a su script de configuración del entorno.

El comando con alias básicamente inicia una subshell que no afecta su entorno de bash actual. Entonces, cuando elimina la variable DYLD_FALLBACK_LIBRARY_PATH, solo es temporal. Después de salir de psql, la variable de entorno se establecerá de nuevo.

Este problema me ha costado toda la mañana resolverlo. Encontré la discusión en http://initd.org/psycopg/articles/2010/11/11/links-about-building-psycopg-mac-os-x/ realmente útil. Gracias a la respuesta de Jurie, la solución a mi problema (en Mac) es la siguiente:

  1. Instala openssl 1.0.0 utilizando brew:

      brew install openssl 
  2. usando el siguiente comando:

     export DYLD_LIBRARY_PATH=/usr/local/Cellar/openssl/**1.0.1x**/lib 

    Reemplace la parte 1.0.1x con su versión actual. Para mi es 1.0.1h.

¡Espero que esto ayude!

EDITAR: Después de un día, encontré que el segundo comando debe ingresarse cada vez que se necesita conectarse a la base de datos, por lo que no es una solución permanente a este problema.

En su entorno de bash antes de cargarlo, intente esto:

 export DYLD_LIBRARY_PATH=/Library/PostgreSQL/xy/lib 

… reemplazando el ‘xy’ con la versión en su sistema.

… tenga en cuenta que establecer esto en su perfil de bash puede interferir con otros progtwigs, como señaló KindOfGuy.

..por supuesto, si no lo está ejecutando desde un indicador de bash, tendrá que configurar su entorno de la forma que le permita pyenv. ..you incluso podría editar pyenv y colocar eso en la parte superior.

Otra alternativa es poner esto en un script de python que se ejecuta antes de intentar importar psycopg2:

 import os os.environ['DYLD_LIBRARY_PATH'] = '/Library/PostgreSQL/xy/lib' 

..again, reemplazando ‘xy’ con la versión en su sistema en / Library / PostgreSQL.

Esto me sucedió después de actualizar Postgresql, y después de instalar psycopg2 en mi virtualenv. Reinstalar (reconstruir) funcionó para mí.

 pip uninstall psycopg2 pip install psycopg2 

Encontré este problema cuando actualicé de postgres.app 9.4 a 9.5 en el Capitán.

Las otras soluciones no funcionarán (fácilmente) en el Capitán debido al locking del sistema en ciertos directorios, lo que significa que la solución de enlace simbólico será menos accesible / ideal para la mayoría.

Esto deja la variable fallback. La respuesta actual apunta al directorio incorrecto. Supongo que el directorio de dylibs ha cambiado desde 2013.

Entonces, aquí está el último directorio alternativo que funciona para mí:

 export DYLD_FALLBACK_LIBRARY_PATH=/Applications/Postgres.app/Contents/Versions/latest/lib:$DYLD_LIBRARY_PATH 

En general, el problema es que no se pudo encontrar una biblioteca requerida. Puede modificar el lugar donde psycopg2 busca libssl utilizando las herramientas del comstackdor de código abierto de Apple, otool y install_name_tool . Se envían con OS X, y las páginas de manual están disponibles con man .

Cambie al directorio del módulo psycopg2 mencionado en el mensaje de error. Una vez ahí:

 $ otool -L _psycopg.so ... @executable_path/../lib/libssl.1.0.0.dylib (compatibility version 1.0.0, current version 1.0.0) ... 

Esto lista las bibliotecas _psycopg2.so buscará. Puedes cambiar dónde se verá con install_name_tool :

 $ install_name_tool -change @executable_path/../lib/libssl.1.0.0.dylib /usr/local/opt/openssl/lib/libssl.1.0.0.dylib _psycopg.so 

Tendrá que ajustar dónde tiene libssl.1.0.0.dylib , por supuesto. El ejemplo que di es la ruta de Homebrew predeterminada, pero puede que la tengas de Anaconda y / o del paquete de aplicaciones PostgreSQL. ( brew install openssl si aún no lo tiene). También es probable que deba repetir para libcrypto.

La ejecución de este cambio puede fallar dependiendo de cómo se construyó _psycopg2.so . Si eso sucede, probablemente puedas construir el módulo tú mismo con rutas de biblioteca personalizadas, pero no entraré en eso.

Este enfoque tiene la ventaja de ser más estrecho y, por lo tanto, menos arriesgado, que el enfoque (dado en otras respuestas aquí) de vincular libssl 1.0.0 a las rutas de búsqueda de dyld (ya sea a través de ln -s o al configurar una variable de entorno DYLD_* ) . (Vea las advertencias contra estos enfoques en un par de discusiones y algunos códigos . Obtenga más información acerca de dyld través de man dyld .) Tiene la desventaja de que debe repetirse para cada copia de psycopg2 . Elige tu propia aventura.

Descargo de responsabilidad: la mayor parte del contenido de esta respuesta proviene del conocimiento que acumulé en un día. No soy un experto.

Me faltaba el paquete del cliente postgresql, así que los instalé con brew y eso me solucionó el problema.

 brew update brew doctor brew install postgresql 

Tuve el mismo error debido a la actualización de Postgres.app (de 9.3 a 9.4).

La solución fue eliminar las ruedas de caché de pip porque apuntaban a la versión 9.3 de Postgres.app.

He encontrado los archivos de memoria caché de la rueda psycopg de esta manera

 grep -r psycopg ~/.pip/cache 

y borré el directorio que encontré con el último comando.

Encontré esta solución que me funcionó.

 sudo cp /Applications/Postgres.app/Contents/Versions/9.3/lib/libssl.1.0.0.dylib /usr/lib sudo ln -fs /usr/lib/libssl.1.0.0.dylib /usr/lib/libssl.dylib sudo cp /Applications/Postgres.app/Contents/Versions/9.3/lib/libcrypto.1.0.0.dylib /usr/lib sudo ln -fs /usr/lib/libcrypto.1.0.0.dylib /usr/lib/libcrypto.dylib 

Reemplace esta parte ‘/Applications/Postgres.app/Contents/Versions/9.3/’ dependiendo de la ubicación donde esté instalado psql en su máquina. Comando para encontrar dónde está instalado which psql : which psql

ACTUALIZACIÓN DE COMENTARIOS: En OSX 10.11 (El Capitán), ya no puede copiar archivos a / usr / lib. Usa / usr / local / lib

En Mac OS X 10.11 (El Capitán), /usr/lib se lee solo para el usuario root. Obtendrá un ln: /usr/lib/libssl.1.0.0.dylib: Operation not permitted error usar /usr/local/lib lugar de /usr .

 $ sudo ln -s /Library/PostgreSQL/9.2/lib/libssl.1.0.0.dylib /usr/local/lib $ sudo ln -s /Library/PostgreSQL/9.2/lib/libcrypto.1.0.0.dylib /usr/local/lib 

¿Instaló psycopg2? Lo necesitas para integrar python con postgresql.

Estoy experimentando un problema similar con mysql. La biblioteca solicitada no puede cargar /usr/local/mysql/lib/libmysqlclient_r.16.dylib

Sin embargo, en este directorio, hay una versión posterior de la biblioteca: /usr/local/mysql/lib/libmysqlclient.20.dylib

Estoy trabajando en un virtualenvwrapper y he intentado reinstalar todas las dependencias instaladas anteriormente sin ningún resultado. Cualquier ayuda sería apreciada grandemente

Solo quería compartir lo que funcionó para mí. Yo estaba usando Anaconda con jupyter. Lo siguiente funcionó:

  DYLD_LIBRARY_PATH=/usr/local/Cellar/openssl/1.0.2k/lib jupyter notebook 

Pero luego causó problemas posteriores al importar otra biblioteca (gráficamente). Después de jugar con pip, me di cuenta de que probablemente debería usar conda en su lugar y lo siguiente pareció solucionarlo todo.

 conda install psycopg2 

La solución que funcionó para mí fue instalar psycopg2 con el conjunto de opciones “no binario”, que le dice a psycopg2 que use el sistema libssl.

Por defecto, psycopg2 usa su propia versión de libssl y parecía mantener una dependencia de una versión anterior de la biblioteca que ya no existía después de mi actualización.

Consulte los documentos de instalación de psycopg2 para obtener más detalles sobre la opción no binario.

 pip uninstall psycopg2 pip install --no-binary :all: psycopg2 

Intente actualizar psycopg2 usando pip install psycopg2 --upgrade a la última versión, luego intente nuevamente.