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 résoudre ce problème, vous devez indiquer à setup.py ce que le backend SSL est utilisé"(source) bien que je ne sois pas sûr de savoir comment procéder car j'ai installé pycurl à l'aide de pip .
Comment puis-je spécifier le backend SSL lors de l'installation de pycurl avec pip?
Merci
Après avoir lu leur fichier INSTALLATION, j’ai pu résoudre mon problème en définissant une variable d’environnement et en effectuant une réinstallation
supprimer l'installation pycurl
existante
pip uninstall pycurl
variable d'exportation avec votre backend ssl back-time (qui est openssl ci-dessus)
export PYCURL_SSL_LIBRARY=openssl
puis, réinstallez pycurl
pip install pycurl
Il pourrait y avoir une autre solution, mais cela fonctionne parfaitement pour moi sur une installation virtualenv
et pip
.
la réponse de helloworld2013 est correcte, mais la clé correspond à la bibliothèque SSL attendue par pycurl. L'erreur sera quelque chose comme:
pycurl: le backend ssl de libcurl link-time (<bibliothèque>) est différent du backend ssl de compilation (<bibliothèque> ou "aucun/autre")
Pour résoudre ce problème, vous devez utiliser la bibliothèque attendue par pycurl. Dans mon cas, mon erreur était "pycurl: le backend ssl de libcurl link-time ( nss ) est différent de celui de ssl au moment de la compilation (openssl)";
pip uninstall pycurl
export PYCURL_SSL_LIBRARY=nss
pip install pycurl
Avec OSX 10.13, un openSSL installé par brassage, et virtualenv, j’ai réussi à:
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
Avec le pip 7.1, vous pouvez mettre les éléments suivants dans votre fichier d’exigences:
pycurl==7.19.5.1 --global-option="--with-nss"
Il suffit de remplacer nss par la bibliothèque de back-end ssl appropriée.
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
La méthode pour réparer le pycurl après la mise à jour Mac OS High Sierra:
Réinstallez les bibliothèques Curl pour qu'elles utilisent OpenSSL au lieu de SecureTransport
brew install curl --with-openssl
Installez pycurl avec un environnement et des chemins d'accès corrects
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
Je suis sur CentOS 7. J'ai essayé tout ce qui précède et je ne pouvais rien faire fonctionner. 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 l’une des solutions ci-dessus en tant qu’utilisateur root. Par exemple, voici ce qui a fonctionné pour moi:
su -
pip uninstall pycurl
export PYCURL_SSL_LIBRARY=[nss|openssl|ssl|gnutls]
pip install pycurl
Bien entendu, toutes les clauses de non-responsabilité habituelles relatives à l'exécution en tant qu'utilisateur root s'appliquent.
Remarque: [nss | openssl | ssl | gnutls] dans le code ci-dessus signifie en choisir un et n'inclut pas les crochets ni les tuyaux. La personne qui a posé la question initiale aurait choisi openssl. Dans mon cas particulier, j'ai choisi nss. Votre message d'erreur devrait vous indiquer le choix à faire.
J'ai eu ce problème pendant des jours. Enfin, avec l'aide d'autres réponses ici (principalement celles d'Alexander Tyapkov), je les ai obtenues 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 d'utiliser la version actuelle de Python et PIP, sinon vous pourriez le compiler pour Python 2.x et utiliser v3.x.
Installation automatique dans 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 dans Elastic Beanstalk. Si c'est votre cas, j'ai écrit un article de blog complet à ce sujet .
Vous pouvez télécharger le fichier tar.gz à partir de ici . Puis extrayez-le dans un dossier. Vous trouverez un fichier setup.py ici. Exécutez la commande là-bas mentionnée par le site. 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 l'a fait sur mon linux.
J'exécute ceci sur OS X et certaines des solutions ci-dessus ne fonctionnaient pas. Semblable à commentaire d'Edward Newell } _, la variable PYCURL_SSL_LIBRARY
semblait avoir été complètement ignorée.
Une lecture plus approfondie de la documentation d'installation de PycURL a révélé les éléments suivants:
pip peut réinstaller le paquet déjà compilé au lieu de recompiler pycurl avec les nouvelles options spécifiées
Par conséquent, je devais le forcer à compiler avec:
pip install --compile pycurl
Cela fonctionne dans un certain nombre de cas. Cependant, j'ai rencontré quelques systèmes qui ont continué à ignorer la variable. Ainsi, comme réponse de maharg101 , j'ai eu recours aux options d'installation qui peuvent être définies via pip:
pip install pycurl --global-option="--with-[ssl|gnutls|nss]"
où vous sélectionnez l'une des trois options entre crochets. Notez que l'option disponible est ssl
et notopenssl
. Si vous spécifiez --with-openssl
, vous obtiendrez une erreur. Notez également que si vous manipulez la variable PYCURL_SSL_LIBRARY
et que vous la basculez sur des valeurs géniales pour voir ce qui se produira, cette dernière commande l’attrapera et générera une erreur si la valeur est définie mais non valide.
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 with pip
Tout d’abord, j’ai retiré pycurl de virtualenv en utilisant pip, comme suggéré précédemment:
pip uninstall pycurl
export PYCURL_SSL_LIBRARY=openssl
pip install pycurl --global-option="--with-openssl"
L'idée ici est que ce paquet a été mis en cache et que nous venons de le réinstaller avec l'option openssl.
J'ai aussi essayé de recompiler pycurl avec pip en utilisant:
pip install pycurl --compile pycurl --no-cache
..mais a eu la même erreur après avoir exécuté:
python
import pycurl
pycurl.version
ImportError: pycurl: le backend ssl de libcurl link-time ( gnutls ) est différent du serveur ssl au moment de la compilation ( openssl )
Partie 2. Installation à partir de tar
Après que la méthode précédente n'ait pas fonctionné, j'ai décidé d'installer pycurl à partir de tar 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 toujours sans ssl.
Partie 3. Réinstallation de curl et curllib
Enfin, j'ai compris que pycurl ne s'installe pas normalement dans l'environnement car Global curl et libcurl sont compilés avec gnutls.
Avant de commencer, vérifiez avec:
curl-config --configure
Une des lignes de sortie sera
'--without-ssl' '--with-gnutls'
Pour le recompiler:
Tout d'abord enlever curl:
Sudo apt-get purge curl
Installer toutes les dépendances de construction nécessaires pour curl
Sudo apt-get build-dep curl
Obtenir les dernières nouvelles (au 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 créer une application à partir des sources
./configure
./make
Sudo make install
Si openssl est installé correctement, configure le trouvera automatiquement. La sortie sera:
version curl: 7.51.0
Configuration de l'hôte: x86_64-pc-linux-gnu
Préfixe d'installation:/usr/local
Compilateur: gcc
Prise en charge de SSL: enabled (OpenSSL) ...
Résolvez tous les problèmes de caches d'emplacement de lib de niveau C ("cache de bibliothèque partagée")
Sudo ldconfig
Maintenant, essayez 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 devrait être:
python
import pycurl
pycurl.version
'PycURL/7.43.0 libcurl/7.51.0 OpenSSL/1.0.2g zlib/1.2.8 librtmp/2.3'
Cela a fonctionné pour moi:
pip install --compile --install-option = "- with-openssl" pycurl
Erreur:
ImportError: pycurl: le backend ssl de libcurl au moment des liens est différent du backend ssl au moment de la compilation (aucun/autre)
Cela a fonctionné pour moi, Mac 10.13, python 3.5, l’importation pycurl a fonctionné après l’installation de cette manière
pip3 uninstall pycurl;
pip3 install --compile --install-option="--with-openssl" pycurl
Après avoir été bloqué pendant longtemps, j'ai découvert qu'Apple avait cessé d'inclure les en-têtes OpenSSL depuis OS X 10.11 El Capitan.
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
J'ai tout essayé sur macOS 10.13 sans succès. Puis j'ai trouvé https://Gist.github.com/webinista/b4b6a4cf8f158431b2c5134630c2cbfe qui a fonctionné:
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
Cela a fonctionné pour moi à la fois lorsque je n'utilise pas virtualenv et dans un virtualenv.
Je ne suis pas sûr que ce soit à cause de l’utilisation de virtualenv, mais sous CentOS 7, ces solutions ne fonctionnaient pas pour moi; les objets compilés étaient toujours en cours d’extraction dans le répertoire de cache lors de la réinstallation. Si vous rencontrez le même problème après avoir essayé d'autres solutions, essayez les solutions suivantes:
pip uninstall pycurl
export PYCURL_SSL_LIBRARY=[nss|openssl|ssl|gnutls]
pip install pycurl --no-cache-dir
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 votes, mais cela n'a pas fonctionné.
L’ancienne version d’openssl est 1.0.1t. Je pense que la réinstallation d’openssl pourrait résoudre ce problème.
--- pycurl's openssl backend time....
J'ai reconstruit le dernier openssl et essayé this answer. Regarde ça.
pip install --compile --install-option="--with-openssl" pycurl
Cela a fonctionné pour moi.
je recommande que nous devrions réinstaller notre openssl pour essayer ..
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
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 est survenu lorsque je suis passé de El Captain à High-Sierra.
Pour python 2.7
Sudo apt-get install build-essential libssl-dev libffi-dev python-dev
Pour Python 3.5, installez également le suivant:
Sudo apt-get install python3.5-dev
Téléchargez la dernière version de pycurl-7.43.0.tar.gz (md5) Source depuis pypi https://pypi.python.org/pypi/pycurl/7.43.0#downloads Et exécutez la commande suivante:
python setup.py --with-openssl install
Aussi, vous pouvez le faire dans un environnement python:
(test_env)user@pc:~/Downloads/pycurl-7.43.0$ python setup.py --with-openssl install
Après 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