descargar - psycopg2 python 3
Psycopg2 Python SSL Support no está compilado en (7)
Como han dicho otros, el mensaje de error parece provenir de Postgres. Puede verificar esto escribiendo: psql sslmode=require
si le da un terminal pgsql, entonces ssl funciona con postgres, si falla, entonces no lo hace
Pruebe y elimine postgres y vuelva a instalar con el soporte de openssl:
brew uninstall postgres
brew update
brew install postgres --with-openssl
Alternativamente, y esta es la forma en que lo sugeriría, hay un instalador de un solo clic en http://postgresapp.com que también podría facilitar la instalación. Siga las instrucciones en el sitio para instalarlo correctamente.
Cuando lo hice en Yosemite, lo instalé en ~ / Library / Application / Support / Postgres93 / var
También querrá crear un certificado (esto también podría ser de donde viene el error) ya sea de un registrador si va a ser público, en el más mínimo de los casos o autofirmado si es para un entorno de desarrollo / prueba.
openssl req -new -text -out server.req
openssl rsa -in privkey.pem -out server.key
rm privkey.pem
openssl req -x509 -in server.req -text -key server.key -out server.crt
chmod og-rwx server.key
Navegue a su directorio de configuración, por defecto es: ~ / Library / Application / Support / Postgres93 / var
Habilitar soporte ssl:
vim postgresql.conf
# change this:
# ssl = on
# to this:
ssl = on
Reinicie la aplicación y luego verifique ssl con psql "sslmode=require"
Si eso funciona, entonces inténtalo a través de tu código Python. Si funciona con el código anterior, pero no con Python, entonces definitivamente es un problema de código Python que debe resolverse.
Estoy tratando de conectarme a mi base de datos postgres usando psycopg2 con sslmode = ''required'' param; sin embargo, me sale el siguiente error
psycopg2.OperationalError: sslmode value "require" invalid when SSL support is not compiled in
Heres un par de detalles sobre mi sistema
- Mac OS X El Capitán
- Python 2.7
- Psycopg2 instalado a través de pip
- Python instalado a través de homebrew
Esto es lo que intenté hacer para solucionar el problema.
-
brew uninstall python
-
which python
aún muestra python viviendo en/usr/local/bin/python
, intentó desinstalar esto pero no pudo. Y escuché que este es el python que usa el sistema operativo y no debería ser desinstalado de todos modos -
brew install python --with-brewed-openssl --build-from-source
-
pip uninstall psycopg2
-
pip install psycopg2
Después de hacer todo esto, la excepción sigue ocurriendo. Estoy ejecutando esta secuencia de comandos de Python a través de #!/usr/bin/env python
No estoy seguro de que importe, pero es un directorio diferente al que which python
muestra
Como no puedo comentar:
Agregando a la respuesta de Brideau que esto solo me funcionó después de cambiar mi versión de Postgres.
brew uninstall postgres
brew update
brew install postgres --with-openssl
A continuación, ejecute el código proporcionado por Brideau y debería funcionar.
El error que está recibiendo se debe a un problema con Postgres en sí, y no con psycopg2
.
psycopg2.OperationalError: sslmode value "require" invalid when SSL support is not compiled in
Lo anterior indica que la versión de Postgres con la que se construyó psycopg2
no tiene soporte SSL compilado. Cuando intenta conectarse al servidor de Posgres en ejecución con ssl=require
que arroje este error.
No menciona cómo instaló Postgres, pero como está utilizando Homebrew para otras cosas, le recomiendo que también instale Postgres de la misma manera:
$ brew update
$ brew install postgresql
La fórmula para postgresql muestra que depende de openssl
y compila con el conjunto de indicadores --with-openssl
. También instalará los encabezados libpq
necesarios. Es posible que deba volver a instalar psycopg2
después de este paso para asegurarse de que selecciona las bibliotecas / versión correctas.
Curiosamente, hay un error en la lista de conda que enumera el mismo error que usted informa cuando se instaló la versión de psycopg2
de psycopg2
, vinculada en un sistema con postgres de Homebrew, lo que sugiere que las bibliotecas SSL faltantes también pueden desencadenar esto.
Yo sugeriría desinstalar cualquier versión existente de Postgres (incluidas las instaladas a través de Homebrew) antes de volver a instalar para minimizar el riesgo de que se use una incorrecta.
Intenta instalar psycopg2
desde MacPorts
sudo port install py27-psycopg2
Si está utilizando v2.6.1 o v2.6.2 de psycopg2 (como yo), la respuesta fue una simple actualización a v2.7. Al leer las notas de la versión de psycopg2, había una solución menor para SSL aunque no parece particularmente relevante.
Mi configuración fue la siguiente:
- Mac OS X El Capitán 10.11.6
- psycopg2 2.6.2 instalado a través de pip
- PostgreSQL instalado a través de Enterprise DB Installer
Ejecutar pip uninstall psycopg2
seguido de pip install psycopg2
resolvió los problemas.
Tuve este mismo error, que resultó ser porque estaba usando la versión Anaconda de psycopg2. Para solucionarlo, adapté la solución de VictorF desde aquí y ejecuté :
conda uninstall psycopg2
sudo ln -s /Users/YOURUSERNAME/anaconda/lib/libssl.1.0.0.dylib /usr/local/lib
sudo ln -s /Users/YOURUSERNAME/anaconda/lib/libcrypto.1.0.0.dylib /usr/local/lib
pip install psycopg2
Luego, cuando ejecute la conda list
verá que psycopg2 se instala con <pip>
en la columna de la derecha. Después de eso, simplemente reinicié Python y todo funcionó.
Ya que está instalando vía pip, debería usar la versión más reciente de psycopg2 (2.6.1). Después de revisar un poco el código, parece que la excepción se está lanzando en connection_int.c, que llama directamente a las bibliotecas postgresql-c para configurar la conexión db. La llamada pasa así:
self->pgconn = pgconn = PQconnectStart(self->dsn);
Dprintf("conn_connect: new postgresql connection at %p", pgconn);
if (pgconn == NULL)
{
Dprintf("conn_connect: PQconnectStart(%s) FAILED", self->dsn);
PyErr_SetString(OperationalError, "PQconnectStart() failed");
return -1;
}
else if (PQstatus(pgconn) == CONNECTION_BAD)
{
Dprintf("conn_connect: PQconnectdb(%s) returned BAD", self->dsn);
PyErr_SetString(OperationalError, PQerrorMessage(pgconn));
return -1;
}
Las palabras clave que se especificaron en su declaración de conexión a psycopg2.connect () se manejan a esa función y los errores se devuelven como excepción OperationalError.
En realidad, el error se está generando directamente en postgresql-lib; es posible que desee verificar qué versión está utilizando, cómo se creó y, si es posible, actualizarlo a una versión con soporte SSL o reconstruirlo desde la fuente con SSL habilitado.
El postgresql-docs también declara que la falta de soporte de SSL generará un error, si el sslmode está configurado para requerir , verificar-ca o verificar-completo . Vea here bajo sslmode
para referencia.
El postgres-website enumera varias formas de instalar postgres desde paquetes binarios, por lo que puede elegir una que se adapte a sus necesidades. No estoy familiarizado con OSX, así que no tengo una recomendación sobre qué es lo mejor.
This pregunta también puede ser útil.
También debe volver a instalar el módulo psycopg2, asegúrese de usar la lib recién instalada al reconstruirla. Consulte la pregunta vinculada (en resumen, deberá colocar la ruta a pg_config
que se incluye en su nueva instalación en $ PATH cuando ejecute pip install psycopg2
).