Estaba intentando 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í algo de documentación que dice que "Para solucionar esto, necesita decirle a setup.py qué backend SSL se usa" (fuente), aunque no estoy seguro de cómo hacerlo ya que instalé pycurl usando pip.
¿Cómo puedo especificar el backend SSL al instalar pycurl con pip?
Gracias
Respuestas:
Después de leer su archivo de INSTALACIÓN, pude resolver mi problema configurando una variable de entorno e hice una reinstalación
eliminar la
pycurl
instalación existentepip uninstall pycurl
exportar variable con su backend ssl de tiempo de enlace (que es openssl arriba)
export PYCURL_SSL_LIBRARY=openssl
a continuación, volver a instalar
pycurl
con ningún cachépip install pycurl --no-cache-dir
No puede haber otra solución por ahí, pero esto funciona perfectamente para mí en un
virtualenv
epip
instalación.fuente
PYCURL_SSL_LIBRARY=openssl
funciona perfectamente!set -x PYCURL_SSL_LIBRARY openssl
lugar deexport PYCURL_SSL_LIBRARY=openssl
si usa la consola fish en lugar de bash .La respuesta de helloworld2013 es correcta, pero la clave coincide con la biblioteca SSL que espera pycurl. El error será algo como:
pycurl: libcurl link-time ssl backend ( <library> ) es diferente del backend ssl en tiempo de compilación ( <library> o " ninguno / otro ")
Para solucionarlo, debe usar la biblioteca que espera pycurl. En mi caso, mi error fue " pycurl: libcurl link-time ssl backend ( nss ) es diferente del backend ssl en tiempo de compilación (openssl) ", así que mi solución fue:
fuente
PYCURL_SSL_LIBRARY
está siendo ignorado por completo. El backend ssl en tiempo de compilación es siempre "(ninguno / otro)" para mí, aunqueecho PYCURL_SSL_LIBRARY
daopenssl
.pycurl
pip install --global-option="--with-openssl" --global-option=build_ext --global-option="-L/usr/local/opt/openssl/lib" --global-option="-I/usr/local/opt/openssl/include" pycurl
pip install pycurl --compile --no-cache-dir
en CentOS 7.3.Con OSX 10.13, un openSSL instalado en brebaje y virtualenv, tuve éxito con:
fuente
brew reinstall openssl
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 backend ssl relevante.
fuente
El método para reparar el pycurl después de la actualización de Mac OS High Sierra:
Reinstale las bibliotecas de curl para usar OpenSSL en lugar de SecureTransport
brew install curl --with-openssl
Instale pycurl con las rutas y el entorno 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
fuente
--user
bandera como arriba, obtuve:Can not perform a '--user' install. User site-packages are not visible in this virtualenv.
Esto funcionó para mí:
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
fuente
easy_install
opción fue la única que funcionó. No entiendo por qué esto es tan complicado. Yo necesitabaexport PYCURL_SSL_LIBRARY=openssl
. Mi uno informó "ninguno / otro" para la biblioteca compilada.Tuve este problema durante días. Finalmente, con la ayuda de otras respuestas aquí (principalmente de Alexander Tyapkov), lo hice funcionar para AWS Elastic Beanstalk.
Instalación manual (conexión 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, es posible que lo esté compilando para Python 2.xy utilizando v3.x.
Instalar automáticamente 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 Celery 4 con Django 1.10 en Elastic Beanstalk. Si ese es tu caso, escribí una publicación de blog completa al respecto .
fuente
Estoy en CentOS 7. Intenté todo lo anterior y no pude hacer que nada funcionara. Resulta que necesitaba ejecutarlos como usuario root. Entonces, si tiene problemas, pruebe cualquiera de las soluciones anteriores como usuario root. Como ejemplo, esto es lo que funcionó para mí:
Por supuesto, se aplican todas las exenciones de responsabilidad 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 barras. 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é elección tomar.
Edición de 2019: Hacer un
sudo pip install
podría causar un problema con la instalación del sistema de la máquina de Python. Quizás intente trabajar en un entorno virtual de Python e instale los paquetes allí. Si eso no funciona, el truco de sudo en mi respuesta es probablemente una de las últimas opciones a considerar.fuente
Puede descargar el archivo tar.gz desde aquí . Luego extráigalo en una carpeta. Allí encontrará un archivo setup.py. Ejecute el comando allí que mencionó el sitio. Por ejemplo:
python setup.py --with-[ssl|gnutls|nss] install
FYI: Intenté instalar pycurl en mis ventanas, pero no pude. Pero lo hice en mi linux.
fuente
Estoy ejecutando esto en OS X y algunas de las soluciones anteriores no funcionaban. Al igual que en el comentario de Edward Newell, la
PYCURL_SSL_LIBRARY
variable parecía haber sido completamente ignorada.La lectura adicional del documento de instalación de PycURL reveló lo siguiente:
Por lo tanto, tuve que forzarlo a compilar con:
pip install --compile pycurl
Eso funciona en varios casos. Sin embargo, me encontré con algunos sistemas que continuaron ignorando la variable, así que, de manera 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 noopenssl
. Si especifica--with-openssl
, obtendrá un error. También tenga en cuenta que si estuviera jugando con laPYCURL_SSL_LIBRARY
variable y la cambiara a valores funky para ver qué sucedería, este último comando definitivamente la detectará y arrojará un error si el valor está establecido pero no es válido.fuente
pip install pycurl --global-option="--with-nss"
funciona para mí. Para que conste, mi error esImportError: pycurl: libcurl link-time ssl backend (nss) is different from compile-time ssl backend (openssl)
Reinstalación de rizo
Probé todas las sugerencias de esta discusión, pero ninguna funcionó para mí. Como solución, he reinstalado curl y curlib. Después de eso, pude instalar pycurl con soporte ssl dentro del entorno.
Al principio:
Parte 1.Re / Instalación con pip
En primer lugar, eliminé pycurl de virtualenv usando 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 se almacenó en caché y simplemente lo reinstalamos con la opción openssl.
También intenté recompilar pycurl con pip usando:
..pero tuvo el mismo error después de ejecutar:
python import pycurl pycurl.version
Parte 2. Instalación desde alquitrán
Después de que el método anterior no funcionó, decidí 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 verifiqué si estaba instalado con soporte SSL o no, pero creo que todavía sin ssl.
Parte 3. Reinstalación de curl y curllib
Finalmente entendí que pycurl no se instala normalmente en el entorno porque global curl y libcurl se compilan con gnutls.
Antes de empezar compruébalo con:
Una de las líneas de salida será
Para recompilarlo:
En primer lugar, elimine el rizo:
Instale las dependencias de compilación necesarias para curl
Obtenga la última versión (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
Si openssl se instaló correctamente, configure lo encontrará automáticamente. La salida será:
Resolver cualquier problema de cachés de ubicación de bibliotecas de nivel C ("caché de biblioteca compartida")
Ahora intente 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
fuente
Para cualquiera que tenga problemas dentro de PyCharm CE en macOS Mojave, así es como lo hice funcionar en venv:
fuente
Esto funcionó para mí:
fuente
Intenté todo aquí en macOS 10.13 sin éxito. Luego encontré https://gist.github.com/webinista/b4b6a4cf8f158431b2c5134630c2cbfe que funcionó:
brew install curl --with-openssl 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
Esto funcionó para mí tanto cuando no usaba un virtualenv como dentro de un virtualenv.
fuente
No estoy seguro si esto se debe a que se ejecuta en un virtualenv, pero en CentOS 7 estas soluciones no me funcionaban; los objetos compilados todavía se estaban tomando del directorio de caché cuando estaba reinstalando. Si se encuentra con el mismo problema después de probar otras soluciones aquí, intente lo siguiente:
fuente
--no-cahe-dir
opción. Solo quiero mencionar que solo sesu -
ejecutó correctamente bajo root como sugirió @alfonso. Hacerlosudo pip3 ...
no era lo suficientemente bueno. Probablemente necesario para que se recoja la variable de entorno.Error:
Esto funcionó para mí, Mac 10.13, python 3.5, la importación de pycurl funcionó después de instalar así
pip3 uninstall pycurl; pip3 install --compile --install-option="--with-openssl" pycurl
fuente
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
fuente
El mismo problema en amazonlinux - resuelto
Tuve este problema mientras creaba una imagen de Docker basada en amazonlinux, instalaba python3.7 y agregaba el módulo pycurl. Todos los demás módulos de Python se instalaron correctamente, excepto pycurl. Después de probar muchas de las soluciones propuestas en los hilos vinculados a este problema, finalmente resolví mi problema usando los siguientes comandos para la instalación de todas las piezas.
yum -y install python3 python3-devel gcc libcurl-devel aws-cli openssl-static.x86_64
luego instaló otros módulos como psycopg2-binary, solicitudes, certifi usando:
pip3 install --user --no-cache-dir -r requirements.txt
y finalmente instalé el módulo pycurl usando:
pip3 install --user --global-option="--with-openssl" --no-cache-dir pycurl
y pasando aquí la opción global openssl. La instalación de la biblioteca estática openssl-static.x86_64 resolvió el problema en mi caso al usar la opción global utilizada por el segundo comando pip3.
fuente
Para python 2.7
Para python 3.5 también instale lo siguiente:
sudo apt-get install python3.5-dev
Descargue la última fuente de 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 de Python:
(test_env)user@pc:~/Downloads/pycurl-7.43.0$ python setup.py --with-openssl install
fuente
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
fuente
Encontré este problema y la respuesta de Sanket Jagtap funcionó para mí. Intenté la respuesta con la mayor cantidad de votos, pero no funcionó.
Mi versión anterior de openssl es 1.0.1t, creo que reinstalar openssl puede resolver este problema.
--- pycurl's openssl backend time....
Reconstruí el último openssl y probé esta respuesta. Mira esto.
pip install --compile --install-option="--with-openssl" pycurl
Esto funcionó para mí.
recomiendo que deberíamos reinstalar nuestro openssl para probar ..
fuente
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
fuente
Este enlace resume la razón por la que ocurren los errores y da una instrucción clara para solucionar el problema.
https://cscheng.info/2018/01/26/installing-pycurl-on-macos-high-sierra.html
Para mí, el problema ocurrió cuando actualicé a High-Sierra desde El Captain.
fuente
FWIW, me encontré con muchos problemas para que esto funcionara a través de AWS Elastic Beanstalk y finalmente pude hacerlo funcionar con:
packages: yum: openssl-devel: [] libcurl-devel: [] container_commands: # Reinstall PyCurl with correct ssl backend 05_reinstall_pycurl: command: | pip install --upgrade pip pip uninstall -y pycurl pip install --global-option='--with-openssl' pycurl
fuente
Recientemente, al actualizar un proyecto de Django, tuve un error similar. Pero esta vez la configuración de la variable de entorno no funcionó. Así que tuve que establecer ambas variables de entorno
export PYCURL_SSL_LIBRARY=openssl
y pasar la bandera--global-option="with-openssl"
.La respuesta original se publicó en esta página.
fuente
export CPPFLAGS=-I/usr/local/opt/openssl/include export LDFLAGS=-L/usr/local/opt/openssl/lib pip install pycurl --global-option="--with-openssl"
fuente