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 quel backend SSL est utilisé" (source) bien que je ne sache pas comment faire cela puisque j'ai installé pycurl en utilisant pip.
Comment puis-je spécifier le backend SSL lors de l'installation de pycurl avec pip?
Merci
Réponses:
Après avoir lu leur fichier INSTALLATION, j'ai pu résoudre mon problème en définissant une variable d'environnement et j'ai réinstallé
supprimer l'
pycurl
installation existantepip uninstall pycurl
exportez la variable avec votre backend SSL au moment du lien (qui est openssl ci-dessus)
export PYCURL_SSL_LIBRARY=openssl
puis, réinstallez
pycurl
avec aucun cachepip install pycurl --no-cache-dir
Il pourrait y avoir une autre solution là-bas, mais cela fonctionne parfaitement pour moi sur une installation
virtualenv
etpip
.la source
PYCURL_SSL_LIBRARY=openssl
fonctionne parfaitement!set -x PYCURL_SSL_LIBRARY openssl
au lieu deexport PYCURL_SSL_LIBRARY=openssl
si vous utilisez la console poisson au lieu de bash .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 link-time libcurl ( <library> ) est différent du backend ssl lors de la compilation ( <library> ou " none / other ")
Pour y remédier, vous devez utiliser la bibliothèque attendue par pycurl. Dans mon cas, mon erreur était " pycurl: le backend ssl link-time libcurl ( nss ) est différent du backend ssl à la compilation (openssl) ", donc mon correctif était:
la source
PYCURL_SSL_LIBRARY
soit complètement ignoré. Le backend ssl au moment de la compilation est toujours "(aucun / autre)" pour moi, même s'ilecho PYCURL_SSL_LIBRARY
donneopenssl
.pycurl
et installé avec les drapeaux: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
sur CentOS 7.3.Avec OSX 10.13, un openSSL installé par Brew et virtualenv, j'ai réussi avec:
la source
brew reinstall openssl
Avec pip 7.1, vous pouvez mettre les éléments suivants dans votre fichier d'exigences:
pycurl==7.19.5.1 --global-option="--with-nss"
Remplacez simplement nss par la bibliothèque backend ssl appropriée.
la source
La méthode pour réparer le pycurl après la mise à jour de Mac OS High Sierra:
Réinstaller les bibliothèques curl pour utiliser OpenSSL au lieu de SecureTransport
brew install curl --with-openssl
Installez pycurl avec un environnement et des chemins de construction 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
la source
--user
drapeau comme ci-dessus, j'ai eu:Can not perform a '--user' install. User site-packages are not visible in this virtualenv.
Cela a fonctionné pour moi:
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 source
easy_install
option était la seule qui fonctionnait. Je ne comprends pas pourquoi c'est si compliqué. J'avais besoinexport PYCURL_SSL_LIBRARY=openssl
. Mon un a signalé "aucun / autre" pour la bibliothèque compilée.J'ai eu ce problème pendant des jours. Enfin, avec l'aide d'autres réponses ici (principalement celles d'Alexander Tyapkov), je l'ai fait fonctionner 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 actuelle de Python et PIP, sinon vous pourriez la compiler pour Python 2.x et utiliser la 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 car j'essayais de configurer Celery 4 avec Django 1.10 dans Elastic Beanstalk. Si tel est votre cas, j'ai écrit un article de blog complet à ce sujet .
la source
Je suis sur CentOS 7. J'ai essayé tout ce qui précède et je n'ai rien pu 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. À titre d'exemple, voici ce qui a fonctionné pour moi:
Bien sûr, toutes les clauses de non-responsabilité habituelles concernant 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 ou 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.
2019 Edit: Faire une
sudo pip install
pourrait causer un problème avec l'installation système de la machine de Python. Essayez peut-être de travailler dans un environnement virtuel Python et d'y installer les packages. Si cela ne fonctionne pas, l'astuce sudo dans ma réponse est probablement l'une des dernières options à considérer.la source
Vous pouvez télécharger le fichier tar.gz ici . Puis extrayez-le dans un dossier. Vous y trouverez un fichier setup.py. Exécutez la commande là-bas que le site a mentionnée. Par exemple:
python setup.py --with-[ssl|gnutls|nss] install
Pour info: j'ai essayé d'installer pycurl sur mes fenêtres, mais je n'ai pas pu. Mais je l'ai fait sur mon Linux.
la source
J'exécute ceci sur OS X et certaines des solutions ci-dessus ne fonctionnaient pas. Semblable au commentaire d'Edward Newell, la
PYCURL_SSL_LIBRARY
variable semble avoir été complètement ignorée.Une lecture plus approfondie du document d'installation de PycURL a révélé ce qui suit:
Par conséquent, j'ai dû le forcer à compiler avec:
pip install --compile pycurl
Cela fonctionne sur un certain nombre de cas. Cependant, j'ai rencontré quelques systèmes qui ont continué à ignorer la variable, donc, comme la réponse de maharg101 , j'ai eu recours aux options d'installation qui, via pip, peuvent être définies comme suit :
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 nonopenssl
. Si vous spécifiez,--with-openssl
vous obtiendrez une erreur. Notez également que si vous dérangez laPYCURL_SSL_LIBRARY
variable et que vous la basculez sur des valeurs géniales pour voir ce qui se passerait, cette dernière commande la capturera certainement et enverra une erreur si la valeur est définie mais non valide.la source
pip install pycurl --global-option="--with-nss"
travaux pour moi. Pour mémoire, mon erreur estImportError: pycurl: libcurl link-time ssl backend (nss) is different from compile-time ssl backend (openssl)
Réinstallation de curl
J'ai essayé toutes les suggestions de cette discussion mais personne n'a fonctionné 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:
Partie 1: Ré / Installation avec pip
Tout d'abord, j'ai supprimé pycurl de virtualenv en utilisant pip comme cela a été suggéré dans les 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 package a été mis en cache et que nous le réinstallons simplement avec l'option openssl.
J'ai également essayé de recompiler pycurl avec pip en utilisant:
.. mais a eu la même erreur après l'exécution:
python import pycurl pycurl.version
Partie 2. Installation depuis tar
Après que la méthode précédente n'a 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 dans le monde entier 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 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-le avec:
L'une des lignes de sortie sera
Pour le recompiler:
Supprimez d'abord curl:
Installez toutes les dépendances de construction nécessaires pour curl
Obtenir la dernière version (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 de la source
Si openssl est correctement installé, configure le trouvera automatiquement. La sortie sera:
Résolvez tous les problèmes de caches d'emplacement de bibliothèque de niveau C ("cache de bibliothèque partagée")
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
la source
Pour tous ceux qui ont des problèmes avec PyCharm CE sur macOS Mojave, voici comment je l'ai fait fonctionner dans venv:
la source
Cela a fonctionné pour moi:
la source
J'ai tout essayé ici sur macOS 10.13 sans succès. Ensuite, 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 de virtualenv et dans un virtualenv.
la source
Je ne sais pas si cela est dû à l'exécution dans un virtualenv, mais sur CentOS 7, ces solutions ne fonctionnaient pas pour moi; les objets compilés étaient toujours extraits du répertoire de cache lorsque je réinstallais. Si vous rencontrez le même problème après avoir essayé d'autres solutions ici, essayez ce qui suit:
la source
--no-cahe-dir
option. Je veux juste mentionner en outre qu'il n'a réussi à fonctionner que sous root avecsu -
comme @alfonso l'a suggéré. Fairesudo pip3 ...
n'était pas assez bien. Probablement nécessaire pour que la variable d'environnement soit captée.Erreur:
Cela a fonctionné pour moi, Mac 10.13, python 3.5, l'importation pycurl a fonctionné après l'installation comme ceci
pip3 uninstall pycurl; pip3 install --compile --install-option="--with-openssl" pycurl
la source
Après avoir été coincé là-dessus pendant une longue période, j'ai découvert qu'Apple avait cessé d'inclure les en-têtes OpenSSL 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
la source
Même problème sur amazonlinux - résolu
J'ai eu ce problème lors de la création d'une image docker basée sur amazonlinux, de l'installation de python3.7 et de l'ajout du module pycurl. Tous les autres modules python ont été installés correctement à l'exception de pycurl. Après avoir essayé plusieurs des solutions proposées dans les discussions liées à ce problème, j'ai finalement résolu mon problème en utilisant les commandes suivantes pour l'installation de toutes les pièces.
yum -y install python3 python3-devel gcc libcurl-devel aws-cli openssl-static.x86_64
puis installé d'autres modules comme psycopg2-binary, requests, certifi en utilisant:
pip3 install --user --no-cache-dir -r requirements.txt
et enfin installé le module pycurl en utilisant:
pip3 install --user --global-option="--with-openssl" --no-cache-dir pycurl
et en passant ici l'option globale openssl. L'installation de la bibliothèque statique openssl-static.x86_64 a résolu le problème dans mon cas en utilisant l'option globale utilisée par la deuxième commande pip3.
la source
Pour python 2.7
Pour python 3.5, installez également le suivant:
sudo apt-get install python3.5-dev
Téléchargez la dernière source pycurl-7.43.0.tar.gz (md5) depuis pypi https://pypi.python.org/pypi/pycurl/7.43.0#downloads et exécutez la commande suivante:
python setup.py --with-openssl install
Vous pouvez également le faire dans un environnement python:
(test_env)user@pc:~/Downloads/pycurl-7.43.0$ python setup.py --with-openssl install
la source
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
la source
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é.
Mon ancienne version openssl est 1.0.1t, 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é cette réponse. 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 ..
la source
La suite a fonctionné 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
la source
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é à High-Sierra d'El Captain.
la source
FWIW, j'ai rencontré de nombreux problèmes pour que cela fonctionne via AWS Elastic Beanstalk et j'ai finalement pu le faire fonctionner avec:
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
la source
Récemment, lors de la mise à niveau d'un projet Django, j'ai eu l'erreur similaire. Mais cette fois, la définition de la variable d'environnement n'a pas fonctionné. J'ai donc dû définir à la fois la variable d'environnement
export PYCURL_SSL_LIBRARY=openssl
et passer le drapeau--global-option="with-openssl"
.La réponse originale a été publiée sur cette page
la source
export CPPFLAGS=-I/usr/local/opt/openssl/include export LDFLAGS=-L/usr/local/opt/openssl/lib pip install pycurl --global-option="--with-openssl"
la source