Erreur SSL backend lors de L'utilisation D'OpenSSL

j'essayais d'installer pycurl dans un virtualenv en utilisant pip et j'ai eu cette erreur

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

j'ai lu une documentation disant que "pour corriger cela, vous devez dire setup.py ce que SSL backend est utilisé" (source) bien que je ne sois pas sûr de la façon de le faire depuis que j'ai installé pycurl en utilisant pip.

Comment puis-je spécifier le backend SSL lors de l'installation de pycurl avec pip?

Merci

65
demandé sur jww 2014-01-13 20:33:45

21 réponses

après avoir lu leur fichier D'INSTALLATION, j'ai pu résoudre mon problème en définissant une variable d'environnement et j'ai fait une réinstallation

  • supprimer pycurl installation

    pip uninstall pycurl

  • export variable avec votre lien-temps ssl backend (qui est openssl ci-dessus)

    export PYCURL_SSL_LIBRARY=openssl

  • puis, réinstaller pycurl

    pip install pycurl

il pourrait y avoir une autre solution mais cela fonctionne parfaitement pour moi sur une installation virtualenv et pip .

85
répondu helloworld2013 2016-12-28 13:34:24

la réponse de helloworld2013 est correcte, mais la clé est de faire correspondre la bibliothèque SSL que pycurl attend. L'erreur sera quelque chose comme:

pycurl: libcurl lien-temps ssl backend ( ) est différente de la compilation ssl backend ( ou " aucun/autre ")

pour le corriger, vous devez utiliser la bibliothèque que pycurl attend. Dans mon cas, mon erreur a été " pycurl: libcurl lien-temps ssl backend ( nss ) est différente de la compilation ssl backend (openssl) ", donc ma solution était:

pip uninstall pycurl
export PYCURL_SSL_LIBRARY=nss
pip install pycurl
65
répondu DrStrangepork 2018-01-19 06:26:39

avec OSX 10.13, un openSSL brew-installé, et virtualenv, j'ai eu du succès avec:

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
38
répondu Michael Wilson 2017-09-15 13:24:00

avec pip 7.1 vous pouvez mettre ce qui suit dans votre dossier d'exigences:

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

il suffit de remplacer nss par la bibliothèque SSL backend appropriée.

22
répondu maharg101 2015-07-09 22:19:44

cela a fonctionné pour moi:

pip uninstall pycurl
export PYCURL_SSL_LIBRARY=nss
easy_install pycurl

rien de tout cela n'a fonctionné pour moi (notez que la différence est simplement 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
19
répondu JoelBondurant 2014-02-25 02:04:05

La méthode pour résoudre le pycurl après Mac OS High Sierra mise à jour:

  1. réinstaller les bibliothèques curl pour utiliser OpenSSL au lieu de SecureTransport

    brew install curl --with-openssl
    
  2. Installer pycurl avec un bon moment de la construction, de l'environnement et les chemins d'accès

    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
    
13
répondu pallly 2018-01-04 09:40:30

j'ai eu ce problème pendant des jours. Finalement avec l'aide d'autres réponses ici (principalement D'Alexandre Tyapkov) Je l'ai obtenu travaillant pour AWS Elastic Beanstalk.

installation manuelle (connexion avec 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"

IMPORTANT: veuillez noter que vous devez vous assurer que vous utilisez la version currect de Python et PIP, sinon vous pourriez La compiler pour Python 2.x et en utilisant v3.x.

auto-install in 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'

j'ai eu ce problème parce que j'essayais de configurer Celery 4 avec Django 1.10 en haricot élastique. Si c'est votre cas, j'ai écrit un billet complet de blog à ce sujet .

6
répondu Diego Jancic 2017-01-05 15:20:34

Je suis sur CentOS 7. J'ai essayé tout ce qui précède et je n'ai rien pu faire marcher. Il s'avère que j'avais besoin de les exécuter en tant qu'utilisateur root. Donc, si vous rencontrez des problèmes, essayez les solutions ci-dessus en tant qu'utilisateur racine. À titre d'exemple, voici ce qui a fonctionné pour moi:

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

bien sûr, tous les Avertissements habituels concernant le fonctionnement en tant qu'utilisateur root s'appliquent.

Note: [nss|openssl|ssl|gnutls] dans le code ci-dessus signifie choisir un, et ne pas inclure le des crochets ou des tuyaux. La personne qui a posé la question initiale aurait choisi openssl. Dans mon cas particulier, j'ai choisi le nss. Votre message d'erreur devrait vous indiquer quel choix Faire.

6
répondu alfonso 2018-06-08 15:32:40

Vous pouvez télécharger le goudron.gz fichier à partir de ici . Puis l'extraire dans un dossier. Vous trouverez un setup.py fichier. Exécutez la commande là-bas que le site mentionné. Par exemple:

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

FYI: j'ai essayé d'installer pycurl à mes fenêtres, mais je n'ai pas pu. Mais je l'ai fait sur mon linux.

5
répondu Sabuj Hassan 2014-01-13 18:21:24

j'exécute ceci sur OS X et certaines des solutions ci-dessus ne fonctionnaient pas. Similaire à le commentaire D'Edward Newell la variable PYCURL_SSL_LIBRARY semble avoir été complètement ignorée.

Une lecture plus approfondie de l'installation pycurl doc a révélé ce qui suit:

pip peut réinstaller le paquet qu'il a précédemment compilé au lieu de recompiler pycurl avec le paquet nouvellement spécifié options

par conséquent, j'ai dû le forcer à compiler avec:

pip install --compile pycurl

Qui fonctionne sur un certain nombre de cas. Cependant, j'ai rencontré quelques systèmes qui continuaient à ignorer la variable de sorte que, similaire à réponse de maharg101 , j'ai eu recours aux options d'installation qui par l'intermédiaire de pip peut être réglée comme ceci:

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

où vous sélectionnez l'une des trois options à l'intérieur des crochets. Notez que l'option disponible est ssl et et non openssl . Si vous spécifiez --with-openssl , vous obtiendrez une erreur. Notez également que si vous vous amusiez avec la variable PYCURL_SSL_LIBRARY et que vous la commutiez en valeurs funky pour voir ce qui se passerait, cette dernière commande l'attrapera certainement et lancera une erreur si la valeur est définie mais pas valide.

4
répondu Gunga 2017-05-23 12:10:34

réinstallation de la boucle

j'ai essayé toutes les suggestions de cette discussion, mais personne n'a travaillé pour moi. Comme solution j'ai réinstallé curl et curlib. Après cela, j'ai pu installer pycurl avec le support ssl dans l'environnement.

au début:

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

Part 1.Re / Installation avec pip

tout d'abord, j'ai supprimé pycurl de virtualenv en utilisant pip comme suggéré réponses précédentes:

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

l'idée ici est que le paquet a été mis en cache et nous venons de le réintroduire avec l'option openssl.

j'ai aussi essayé de recompiler pycurl avec pip en utilisant:

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

..mais avait la même erreur après l'exécution:

python
import pycurl
pycurl.version

ImportError: pycurl: libcurl lien-temps ssl backend ( gnutls ) est différent du backend de compilation ssl ( openssl )

de la Partie 2. Installation à partir du goudron

après la méthode précédente n'a pas fonctionné j'ai decidede pour installer pycurl à partir de goudron avec:

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

il a installé pycurl globalement mais pas dans virtualenv. Je n'ai pas non plus vérifié s'il était installé avec le support SSL ou non, mais je pense que sans ssl.

de la Partie 3. Réinstallation du bouclage et du bouclage

finalement j'ai compris que pycurl ne s'installe pas normalement dans l'environnement parce que global curl et libcurl sont compilés avec gnutls.

avant de commencer, vérifiez avec:

curl-config --configure

Une des lignes de sortie sera

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

pour le recompiler:

tout D'abord supprimer curl:

sudo apt-get purge curl

installer toutes les dépendances de construction nécessaires pour curl

sudo apt-get build-dep curl

Obtenir la dernière (à compter du 20 Décembre 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

les étapes habituelles pour la construction une application de la source

./configure
./make
 sudo make install

si openssl est installé correctement, configure le trouvera automatiquement. La sortie sera:

version curl: 7.51.0

L'hôte de l'installation: x86_64-pc-linux-gnu

Installer le préfixe: /usr/local

Compilateur: gcc

Prise en charge SSL: activée (OpenSSL) ...

résoudre tout problème de caches de localisation de niveau C lib ("shared library cache")

sudo ldconfig

essayez maintenant de réinstaller pycurl dans l'environnement:

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"

le résultat doit être:

python
import pycurl
pycurl.version

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

2
répondu Alexander Tyapkov 2016-12-21 00:36:53

Je ne suis pas sûr que ce soit à cause de l'exécution dans un virtualenv, mais sur CentOS 7 ces solutions ne fonctionnaient pas pour moi; les objets compilés étaient encore saisis dans le cache dir lorsque j'ai été réinstallé. Si vous rencontrez le même problème après avoir essayé d'autres solutions ici, essayez ce qui suit:

pip uninstall pycurl
export PYCURL_SSL_LIBRARY=[nss|openssl|ssl|gnutls]
pip install pycurl --no-cache-dir
1
répondu Robert Kelly 2016-08-12 18:38:13

erreur:

ImportError: pycurl: libcurl lien-temps ssl backend (openssl) est différente de la compilation ssl backend (aucun/autre)

cela a fonctionné pour moi, Mac 10.13, python 3.5, pycurl importation a fonctionné après l'installation comme ceci

pip3 uninstall pycurl;

pip3 install --compile --install-option="--with-openssl" pycurl
1
répondu vairav 2017-11-16 18:57:02

après avoir été coincé sur ce pendant une longue période, j'ai découvert que apple a cessé d'inclure OpenSSL headers depuis OS X 10.11 El Capitan. comment réparer?

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
1
répondu Whitebear 2018-01-30 07:50:09

pour python 2.7

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

pour python 3.5 installer aussi le suivant:

sudo apt-get install python3.5-dev

Téléchargez le dernier pycurl-7.43.0.tar.GZ (md5) Source: pypi https://pypi.python.org/pypi/pycurl/7.43.0#downloads et lancez la commande suivante:

python setup.py --with-openssl install

vous pouvez aussi le faire dans l'environnement python:

(test_env)user@pc:~/Downloads/pycurl-7.43.0$ python setup.py --with-openssl install
0
répondu Andrew Nodermann 2016-09-24 13:47:01
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
0
répondu Sanket Jagtap 2016-12-28 12:46:57

j'ai rencontré ce problème et la réponse de Sanket Jagtap a fonctionné pour moi. J'ai essayé la réponse avec le plus de voix, mais ça n'a pas marché.

mon ancienne version d'openssl est 1.0.1 t, je pense que réinstaller openssl peut résoudre ce problème.

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

j'ai reconstruit le dernier openssl et essayé ce réponse. Check this out.

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

ça a marché pour moi.

je recommande de réinstaller notre openssl pour try..

0
répondu F.allen 2017-05-23 12:02:42

suivant a travaillé pour moi avec 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
0
répondu Samuel 2018-01-10 12:47:42

ce lien résume la raison pour laquelle les erreurs se produisent et donne une instruction claire pour résoudre le problème.

https://cscheng.info/2018/01/26/installing-pycurl-on-macos-high-sierra.html

pour moi, le problème s'est produit quand je suis passé à High-Sierra de El Capitaine.

0
répondu hyukkyulee 2018-03-19 03:20:18

cela a fonctionné pour moi:

pip install --compilation --install-option= '--with-openssl" pycurl

0
répondu user10148784 2018-07-28 16:36:38
export CPPFLAGS=-I/usr/local/opt/openssl/include
export LDFLAGS=-L/usr/local/opt/openssl/lib

pip install pycurl --global-option="--with-openssl"
-1
répondu Evgenii 2018-06-29 06:51:48