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
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
installationpip 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
.
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 (
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
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
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.
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ésoudre le pycurl après Mac OS High Sierra mise à jour:
-
réinstaller les bibliothèques curl pour utiliser OpenSSL au lieu de SecureTransport
brew install curl --with-openssl
-
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
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 .
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.
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.
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.
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'
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
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
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
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
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
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..
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
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.
cela a fonctionné pour moi:
pip install --compilation --install-option= '--with-openssl" pycurl
export CPPFLAGS=-I/usr/local/opt/openssl/include
export LDFLAGS=-L/usr/local/opt/openssl/lib
pip install pycurl --global-option="--with-openssl"