python - ejemplos - Imagen Psycopg2 no encontrada
django (16)
Tratando de configurar postgres con la aplicación de mac 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
¿Has instalado psycopg2? Lo necesitas para integrar python con postgresql.
En Mac OS X 10.11 (El Capitan), /usr/lib
es de solo lectura 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
En resumen, el problema es que no se pudo encontrar una biblioteca requerida. Puede modificar dónde psycopg2
busca libssl
utilizando las herramientas de compilación de código abierto de Apple, otool
y install_name_tool
. Estos se envían con OS X, y las páginas de manual están disponibles con man <command>
.
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 enumera las bibliotecas que _psycopg2.so
buscará. Puede 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
Necesitarás ajustar por dónde tienes libssl.1.0.0.dylib
, por supuesto. El ejemplo que proporcioné es la ruta predeterminada de Homebrew, pero puede que la tenga de Anaconda y / o del paquete de aplicaciones de PostgreSQL. ( brew install openssl
si aún no la tiene). También es probable que necesite repetir para libcrypto.
La ejecución de este cambio puede fallar dependiendo de cómo se construyó _psycopg2.so
. Si eso sucede, probablemente usted mismo pueda construir el módulo 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 en las rutas de búsqueda de dyld
(ya sea a través de ln -s
o estableciendo una variable de entorno DYLD_*
) . (Consulte las advertencias contra estos enfoques en un pair de discussions y algunos códigos . Conozca más sobre dyld
través del man dyld
.) Tiene la desventaja de necesitar ser repetido para cada copia de psycopg2
. Elige tu propia aventura.
Descargo de responsabilidad: la mayor parte del contenido de esta respuesta proviene del conocimiento que improvisé en un día. No soy un experto
En su entorno bash antes de cargarlo, intente esto:
export DYLD_LIBRARY_PATH=/Library/PostgreSQL/x.y/lib
..replazando el ''xy'' con la versión en su sistema.
... tenga en cuenta que configurar esto en su perfil de bash puede interferir con otros programas, como notó KindOfGuy.
..por supuesto, si no lo está ejecutando desde un prompt bash, tendrá que configurar su entorno de la manera que pyenv lo permita. ... incluso podrías editar pyenv y colocar eso en la parte superior.
Otra alternativa es poner esto en una secuencia de comandos python que se ejecuta antes de intentar importar psycopg2:
import os
os.environ[''DYLD_LIBRARY_PATH''] = ''/Library/PostgreSQL/x.y/lib''
..una vez, reemplazando ''xy'' con la versión en su sistema en / Library / PostgreSQL.
Encontré esta solución que funcionó para mí
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 ''/ Aplicaciones / Postgres.app / Contenidos / Versiones / 9.3/'' según la ubicación donde esté instalado psql en su máquina. Comando para encontrar dónde está instalado which psql
: which psql
ACTUALIZAR DE COMENTARIOS: en OSX 10.11 (El Capitan), ya no puede copiar archivos a / usr / lib. Use / usr / local / lib
Encontré este problema cuando actualicé de postgres.app 9.4 a 9.5 en el capitan.
Las otras soluciones no funcionarán (fácilmente) en el capitán debido al bloqueo 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 de repliegue. La respuesta actual apunta al directorio incorrecto. Supongo que el directorio 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
Encontré una solución que funcionó para mí cuando se trata de un problema similar en los rieles. Agregue lo siguiente a .bash_profile, .bash_rc o su 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 serios problemas con otras aplicaciones que dependen de él, pero usar la ruta alternativa evita estos problemas.
Ver también: github.com/PostgresApp/PostgresApp/issues/…
EDIT : parece que establecer DYLD_FALLBACK_LIBRARY_PATH causa un error cuando intentas ejecutar psql. Para solucionar esto, puede agregar las siguientes dos líneas a su .bash_profile:
alias psql="(. ~/.bash_profile; unset DYLD_FALLBACK_LIBRARY_PATH; psql)";
Esto supone que estás utilizando bash y que tu .bash_profile está ubicado en tu directorio de inicio. Si ese no es el caso (o si está utilizando .bashrc u otra configuración de entorno en lugar de .bash_profile) cambie la parte del ~/.bash_profile
del comando a la ruta de acceso al script de configuración del entorno.
El comando con alias básicamente inicia una subshell que no afecta su entorno bash actual. Por lo tanto, cuando desactive la variable DYLD_FALLBACK_LIBRARY_PATH, solo será temporal. Después de salir de psql, la variable de entorno se establecerá nuevamente.
Este problema me costó toda la mañana para 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:
Instala openssl 1.0.0 usando brew:
brew install openssl
usando el siguiente comando:
export DYLD_LIBRARY_PATH=/usr/local/Cellar/openssl/**1.0.1x**/lib
reemplace la pieza 1.0.1x con su versión actual. Para mí 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 necesita conectarse a la base de datos, por lo que no es una solución permanente a este problema.
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
Estoy experimentando un problema similar con mysql. La biblioteca solicitada no está cargando /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 virtualenvwrapper y he intentado reinstalar todas las dependencias de instalación anteriores en vano. Cualquier ayuda sería muy apreciada.
Intente actualizar psycopg2
usando pip install psycopg2 --upgrade
a la última versión, luego intente de nuevo.
La solución que funcionó para mí fue instalar psycopg2 con el conjunto de opciones "no binarias", que le dice a psycopg2 que use el sistema libssl.
De forma predeterminada, psycopg2 usa su propia versión de libssl y parecía mantener una dependencia en 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 binaria.
pip uninstall psycopg2
pip install --no-binary :all: psycopg2
Me faltaba el paquete del cliente postgresql, así que los instalé con brew y eso solucionó este problema para mí.
brew update
brew doctor
brew install postgresql
Solo quería compartir lo que funcionó para mí. 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 (plotly). Después de jugar con pip, me di cuenta de que probablemente debería estar usando conda y el siguiente parecía arreglarlo todo.
conda install psycopg2
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 del caché de pip porque apuntaban a la versión 9.3 de Postgres.app.
He encontrado los archivos de acorde de caché psycopg de esta manera
grep -r psycopg ~/.pip/cache
y borré el directorio que encontré con el último comando.
$ 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 ejecutar los comandos de arriba.
En OS X El Capitán, no puede hacer estos enlaces sin desactivar la protección del sistema, pero funciona bien si se vincula a / usr / local / lib