python curl virtualenv pip pycurl

python - Error de servidor back-end SSL al usar OpenSSL



curl virtualenv (20)

Estaba tratando de instalar pycurl en un virtualenv usando pip y recibí este error

ImportError: pycurl: libcurl link-time ssl backend (openssl) is different from compile-time ssl backend (none/other)

Leí documentación que decía: "Para solucionar esto, debes indicar a setup.py qué back-end SSL se usa" (source) aunque no estoy seguro de cómo hacerlo desde que instalé pycurl usando pip.

¿Cómo puedo especificar el back-end SSL al instalar pycurl con pip?

Gracias


Reinstalación de curl

Probé todas las sugerencias de esta discusión, pero nadie trabajó para mí. Como solución, he reinstalado Curlib y Curlib. Después de eso, pude instalar pycurl con soporte SSL dentro del entorno.

Al principio:

''PycURL / 7.43.0 libcurl / 7.47.0 GnuTLS / 3.4.10 zlib / 1.2.8 libidn / 1.32 librtmp / 2.3''

Parte 1.Re / Instalación con pip

En primer lugar, he eliminado pycurl de virtualenv utilizando pip como se sugirió en las respuestas anteriores:

pip uninstall pycurl export PYCURL_SSL_LIBRARY=openssl pip install pycurl --global-option="--with-openssl"

La idea aquí es que el paquete fue almacenado en caché y simplemente lo escribimos de nuevo con la opción de openssl.

También traté de recompilar pycurl con pip usando:

pip install pycurl --compile pycurl --no-cache

..pero tuvo el mismo error después de ejecutar:

python import pycurl pycurl.version

ImportError: pycurl: libcurl tiempo de enlace ssl backend ( gnutls ) es diferente del tiempo de compilación ssl backend ( openssl )

Parte 2. Instalación del alquitrán

Después de que el método anterior no funcionó, he decidido instalar pycurl desde tar con:

curl -O https://pypi.python.org/packages/source/p/pycurl/pycurl-7.43.0.tar.gz sudo tar -xzvf pycurl-7.43.0.tar.gz cd pycurl-7.43.0/ sudo python setup.py --with-ssl install

Ha instalado pycurl globalmente pero no dentro de virtualenv. Tampoco compruebo si se instaló con soporte SSL o no, pero creo que todavía sin SSL.

Parte 3. Reinstalación de curlib y curllib

Finalmente entendí que pycurl no se instala normalmente en el entorno porque global curl y libcurl se compilan con gnutls.

Antes de comenzar, verifíquelo con:

curl-config --configure

Una de las líneas de salida será

''--without-ssl'' ''--with-gnutls''

Para recompilarlo:

Primero quite el rizo:

sudo apt-get purge curl

Instale cualquier dependencia de compilación necesaria para curl

sudo apt-get build-dep curl

Obtenga la última (a partir del 20 de diciembre de 2016) libcurl

mkdir ~/curl wget http://curl.haxx.se/download/curl-7.51.0.tar.bz2 tar -xvjf curl-7.51.0.tar.bz2 cd curl-7.51.0

Los pasos habituales para crear una aplicación desde la fuente

./configure ./make sudo make install

Si openssl está instalado correctamente, configure lo encontrará automáticamente. El resultado será:

versión enrollable: 7.51.0
Configuración del host: x86_64-pc-linux-gnu
Instalar el prefijo: / usr / local
Compilador: gcc
Soporte SSL: habilitado (OpenSSL) ...

Resuelva cualquier problema de cach de ubicación de lib del nivel C ("caché de biblioteca compartida")

sudo ldconfig

Ahora intenta reinstalar pycurl dentro del entorno:

curl -O https://pypi.python.org/packages/source/p/pycurl/pycurl-7.43.0.tar.gz pip install pycurl-7.43.0.tar.gz --global-option="--with-openssl"

El resultado debería ser:

python import pycurl pycurl.version

''PycURL / 7.43.0 libcurl / 7.51.0 OpenSSL / 1.0.2g zlib / 1.2.8 librtmp / 2.3''


Con OSX 10.13, un openSSL instalado por brew y virtualenv, tuve éxito con:

workon ..your-environment-here.. pip uninstall pycurl export PYCURL_SSL_LIBRARY=openssl export LDFLAGS=-L/usr/local/opt/openssl/lib;export CPPFLAGS=-I/usr/local/opt/openssl/include;pip install pycurl --compile --no-cache-dir


Con pip 7.1 puede poner lo siguiente en su archivo de requisitos:

pycurl==7.19.5.1 --global-option="--with-nss"

Simplemente reemplace nss con la biblioteca de back-end ssl relevante.


Después de estar atascado en esto durante mucho tiempo, descubrí que Apple dejó de incluir encabezados OpenSSL desde OS X 10.11 El Capitan. ¿como arreglar?

1) brew install openssl 2) echo ''export PATH="/usr/local/opt/openssl/bin:$PATH"'' >> ~/.bash_profile (or .zshrc for zsh, etc) 3) pip uninstall pycurl 4) pip install --install-option="--with-openssl" --install-option="--openssl-dir=/usr/local/opt/openssl" pycurl


Después de leer su archivo INSTALLATION, pude resolver mi problema estableciendo una variable de entorno e hice una reinstalación

  • eliminar la instalación de pycurl existente

    pip uninstall pycurl

  • exportar variable con su back-end ssl de tiempo de enlace (que es openssl arriba)

    export PYCURL_SSL_LIBRARY=openssl

  • luego, reinstala pycurl

    pip install pycurl

Podría haber otra solución, pero esto funciona perfectamente para mí en una instalación virtualenv y pip .


El método para arreglar el pycurl después de la actualización de Mac OS High Sierra:

  1. Reinstale las bibliotecas curl para usar OpenSSL en lugar de SecureTransport

    brew install curl --with-openssl

  2. Instalar Pycurl con un entorno y rutas de tiempo de compilación correctos

    export PYCURL_SSL_LIBRARY=openssl pip uninstall pycurl pip install --no-cache-dir --global-option=build_ext --global-option="-L/usr/local/opt/openssl/lib" --global-option="-I/usr/local/opt/openssl/include" --user pycurl


Encontré este problema y la respuesta de Sanket Jagtap funcionó para mí. Intenté la respuesta con la mayoría de los votos pero no funcionó.

Mi versión anterior de openssl es 1.0.1t, creo que la reinstalación de openssl puede resolver este problema.

--- pycurl''s openssl backend time....

Reconstruí el último openssl y probé this respuesta. Mira esto.

pip install --compile --install-option="--with-openssl" pycurl

Esto funcionó para mí.

Recomiendo que deberíamos reinstalar nuestro openssl para intentar ...


Error:

ImportError: pycurl: libcurl link-time ssl backend (openssl) es diferente del compilador ssl en tiempo de compilación (ninguno / otro)

Esto funcionó para mí, Mac 10.13, python 3.5, la importación pycurl funcionó después de instalar de esta manera

pip3 uninstall pycurl; pip3 install --compile --install-option="--with-openssl" pycurl


Este enlace resume la razón por la cual ocurren los errores y proporciona instrucciones claras para solucionar el problema.

cscheng.info/2018/01/26/…

Para mí, el problema ocurrió cuando ascendí a High-Sierra de El Captain.


Esto funcionó para mí:

pip uninstall pycurl export PYCURL_SSL_LIBRARY=nss easy_install pycurl

Nada de esto funcionó para mí (tenga en cuenta que la diferencia es simplemente easy_install vs pip):

pip uninstall pycurl export PYCURL_SSL_LIBRARY=[nss|openssl|ssl|gnutls] pip install pycurl #xor curl -O https://pypi.python.org/packages/source/p/pycurl/pycurl-7.19.3.1.tar.gz #... python setup.py --with-[nss|openssl|ssl|gnutls] install


Estoy ejecutando esto en OS X y algunas de las soluciones anteriores no estaban funcionando. Al igual que en el comentario de Edward Newell, la variable PYCURL_SSL_LIBRARY parece haber sido ignorada por completo.
Lectura adicional del documento de instalación PycURL reveló lo siguiente:

pip puede reinstalar el paquete que compiló previamente en lugar de volver a compilar pycurl con opciones recién especificadas

Por lo tanto, tuve que obligarlo a compilar con:

pip install --compile pycurl

Eso funciona en varios casos. Sin embargo, me encontré con algunos sistemas que seguían ignorando la variable, así que, de forma similar a la respuesta de maharg101 , recurrí a las opciones de instalación que a través de pip se pueden configurar así:

pip install pycurl --global-option="--with-[ssl|gnutls|nss]"

donde selecciona una de las tres opciones dentro de los corchetes. Tenga en cuenta que la opción disponible es ssl y no openssl . Si especifica --with-openssl obtendrá un error. También tenga en cuenta que si estaba jugando con la variable PYCURL_SSL_LIBRARY y cambiándola a valores funky para ver qué pasaría, este último comando definitivamente lo detectará y arrojará un error si el valor está establecido pero no es válido.


Estoy en CentOS 7. Intenté todo lo anterior y no conseguí que nada funcionara. Resulta que necesitaba ejecutar esto como usuario root. Por lo tanto, si tiene problemas, pruebe cualquiera de las soluciones anteriores como usuario root. Como ejemplo, esto es lo que funcionó para mí:

su - pip uninstall pycurl export PYCURL_SSL_LIBRARY=[nss|openssl|ssl|gnutls] pip install pycurl

Por supuesto, se aplican todas las renuncias habituales sobre la ejecución como usuario root.

Nota: [nss | openssl | ssl | gnutls] en el código anterior significa elegir uno, y no incluir los corchetes o tubos. La persona que hizo la pregunta original habría elegido openssl. En mi caso particular, elegí nss. Su mensaje de error debería indicarle qué opción tomar.


La respuesta de helloworld2013 es correcta, pero la clave es hacer coincidir la biblioteca SSL que pycurl está esperando. El error será algo así como:

pycurl: libcurl link-time ssl backend ( <library> ) es diferente del compilador ssl en tiempo de compilación ( <library> o " none / other ")

Para solucionarlo, debe usar la biblioteca que pycurl está esperando. En mi caso, mi error fue " pycurl: libcurl link-time ssl backend ( nss ) es diferente de ssl backend en tiempo de compilación (openssl) ", por lo que mi solución fue:

pip uninstall pycurl export PYCURL_SSL_LIBRARY=nss pip install pycurl


Lo siguiente funcionó para mí con Python3.6

MacOS High-Sierra

sudo pip3 uninstall pycurl sudo pip3 install --compile --install-option="--with-openssl" pycurl

CentOS 7

sudo pip3 uninstall pycurl sudo pip3 install --compile --install-option="--with-nss" pycurl


No estoy seguro de si esto se debe a que se ejecuta en Virtualenv, pero en CentOS 7 estas soluciones no me funcionaron; los objetos compilados seguían siendo tomados del directorio de caché cuando estaba reinstalando. Si te encuentras con el mismo problema después de probar otras soluciones aquí, prueba lo siguiente:

pip uninstall pycurl export PYCURL_SSL_LIBRARY=[nss|openssl|ssl|gnutls] pip install pycurl --no-cache-dir


Para Python 2.7

sudo apt-get install build-essential libssl-dev libffi-dev python-dev

Para Python 3.5 también instale el siguiente:

sudo apt-get install python3.5-dev

Descargue la última fuente pycurl-7.43.0.tar.gz (md5) de pypi https://pypi.python.org/pypi/pycurl/7.43.0#downloads y ejecute el siguiente comando:

python setup.py --with-openssl install

También puedes hacerlo en el entorno python:

(test_env)user@pc:~/Downloads/pycurl-7.43.0$ python setup.py --with-openssl install


Puede descargar el archivo tar.gz desde here . Luego, extráigalo en una carpeta. Encontrará un archivo setup.py allí. Ejecute el comando que el sitio menciona. Por ejemplo:

python setup.py --with-[ssl|gnutls|nss] install

FYI: Intenté instalar Pycurl en mi ventana, pero no pude. Pero lo hizo en mi Linux.


Tuve este problema por días. Finalmente, con la ayuda de otras respuestas aquí (principalmente de Alexander Tyapkov) lo conseguí trabajando para AWS Elastic Beanstalk.

Instalación manual (conectando con SSH):

sudo pip uninstall pycurl curl -O https://pypi.python.org/packages/source/p/pycurl/pycurl-7.43.0.tar.gz sudo pip install pycurl-7.43.0.tar.gz --global-option="--with-nss"

IMPORTANTE: tenga en cuenta que debe asegurarse de estar utilizando la versión actual de Python y PIP; de lo contrario, podría compilarla para Python 2.xy usar v3.x.

Instalación automática en Elastic Beanstalk:

files: "/usr/local/share/pycurl-7.43.0.tar.gz" : mode: "000644" owner: root group: root source: https://pypi.python.org/packages/source/p/pycurl/pycurl-7.43.0.tar.gz commands: 01_download_pip3: # run this before PIP installs requirements as it needs to be compiled with OpenSSL command: ''curl -O https://bootstrap.pypa.io/get-pip.py'' 02_install_pip3: # run this before PIP installs requirements as it needs to be compiled with OpenSSL command: ''python3 get-pip.py'' 03_pycurl_uninstall: # run this before PIP installs requirements as it needs to be compiled with OpenSSL command: ''/usr/bin/yes | sudo pip uninstall pycurl'' 04_pycurl_download: # run this before PIP installs requirements as it needs to be compiled with OpenSSL command: ''curl -O https://pypi.python.org/packages/source/p/pycurl/pycurl-7.43.0.tar.gz'' 05_pycurl_reinstall: # run this before PIP installs requirements as it needs to be compiled with OpenSSL command: ''sudo pip install pycurl-7.43.0.tar.gz --global-option="--with-nss"'' container_commands: 09_pycurl_reinstall: # run this before PIP installs requirements as it needs to be compiled with OpenSSL # the upgrade option is because it will run after PIP installs the requirements.txt file. # and it needs to be done with the virtual-env activated command: ''source /opt/python/run/venv/bin/activate && pip3 install /usr/local/share/pycurl-7.43.0.tar.gz --global-option="--with-nss" --upgrade''

Tuve este problema porque estaba intentando configurar Apio 4 con Django 1.10 en Elastic Beanstalk. Si ese es tu caso, escribí una publicación completa sobre el tema .


export CPPFLAGS=-I/usr/local/opt/openssl/include export LDFLAGS=-L/usr/local/opt/openssl/lib pip install pycurl --global-option="--with-openssl"


pip install -U pip if [ "$(curl --version | grep NSS 2>/dev/null)" ]; then pip install --compile --install-option="--with-nss" pycurl else pip install --compile --install-option="--with-openssl" pycurl fi