it-swarm.com.de

SSL-Backend-Fehler bei Verwendung von OpenSSL

Ich habe versucht, pycurl in einem virtualenv mit pip zu installieren und habe diesen Fehler erhalten 

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

Ich habe einige Dokumentationen gelesen, die besagen, dass "Um dies zu beheben, müssen Sie setup.py mitteilen, welches SSL-Backend verwendet wird"(Quelle) obwohl ich nicht sicher bin, wie das geht, seit ich pycurl mit pip installiert habe .

Wie kann ich das SSL-Backend angeben, wenn Sie pycurl mit pip installieren?

Vielen Dank

72
helloworld2013

Nachdem ich die INSTALLATION-Datei gelesen hatte, konnte ich mein Problem durch Setzen einer Umgebungsvariablen lösen und eine Neuinstallation durchführen

  • vorhandene pycurl-Installation entfernen 

    pip uninstall pycurl

  • exportvariable mit Ihrem Link-Time-SSL-Backend (oben ist openssl)

    export PYCURL_SSL_LIBRARY=openssl

  • installieren Sie anschließend pycurl erneut.

    pip install pycurl

Es könnte andere Lösungen geben, aber bei einer virtualenv- und pip-Installation funktioniert das perfekt.

100
helloworld2013

die Antwort von helloworld2013 ist korrekt, aber der Schlüssel stimmt mit der SSL-Bibliothek überein, die pycurl erwartet. Der Fehler wird ungefähr so ​​sein:

pycurl: libcurl link-time-ssl-backend (<library>) unterscheidet sich vom kompilier-ssl-backend (<library> oder "none/other")

Um dies zu beheben, müssen Sie die Bibliothek verwenden, die pycurl erwartet. In meinem Fall war mein Fehler "pycurl: libcurl link-time-ssl-backend ( nss ) unterscheidet sich von compile-time-ssl-backend (openssl)".

pip uninstall pycurl
export PYCURL_SSL_LIBRARY=nss
pip install pycurl
68
DrStrangepork

Mit OSX 10.13, einem installierten openSSL und virtualenv war ich erfolgreich mit:

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
42
Michael Wilson

Mit pip 7.1 können Sie Folgendes in Ihre Anforderungsdatei einfügen:

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

Ersetzen Sie einfach nss durch die entsprechende ssl-Backend-Bibliothek.

23
maharg101

Das hat für mich funktioniert:

pip uninstall pycurl
export PYCURL_SSL_LIBRARY=nss
easy_install pycurl

Nichts davon funktionierte für mich (beachten Sie, dass der Unterschied einfach easy_install vs. pip ist):

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
JoelBondurant

Die Methode zum Beheben des Pycurl nach einem Mac OS High Sierra-Update:

  1. Installieren Sie die Curl-Bibliotheken erneut, um OpenSSL anstelle von SecureTransport zu verwenden.

    brew install curl --with-openssl
    
  2. Pycurl mit korrekter Build-Time-Umgebung und Pfaden installieren

    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
    
16
pallly

Ich bin bei CentOS 7. Ich habe alles ausprobiert und konnte nichts zur Arbeit bekommen. Es stellte sich heraus, dass ich diese als Rootbenutzer ausführen musste. Wenn Sie also Probleme haben, probieren Sie eine der oben genannten Lösungen als Root-Benutzer aus. Als Beispiel hat sich Folgendes für mich bewährt:

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

Selbstverständlich gelten alle üblichen Haftungsausschlüsse bezüglich der Ausführung als Root-Benutzer.

Hinweis: [nss | openssl | ssl | gnutls] im obigen Code bedeutet, eine auszuwählen und die eckigen Klammern oder Rohre nicht zu berücksichtigen. Die Person, die die ursprüngliche Frage gestellt hat, hätte openssl gewählt. In meinem speziellen Fall wählte ich nss. Ihre Fehlermeldung sollte Ihnen sagen, welche Wahl Sie treffen.

7
alfonso

Ich hatte dieses Problem seit Tagen. Schließlich habe ich es mit Hilfe anderer Antworten (hauptsächlich von Alexander Tyapkov) für AWS Elastic Beanstalk bekommen.

Manuelle Installation (Verbindung mit 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"

WICHTIG: Beachten Sie, dass Sie sicherstellen müssen, dass Sie die aktuelle Version von Python und PIP verwenden. Andernfalls kompilieren Sie sie möglicherweise für Python 2.x und verwenden v3.x.

Automatische Installation 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'

Ich hatte dieses Problem, weil ich versuchte, Celery 4 mit Django 1.10 in Elastic Beanstalk zu konfigurieren. Wenn dies der Fall ist, ich habe einen vollständigen Blogbeitrag darüber geschrieben .

6
Diego Jancic

Sie können die tar.gz-Datei von hier herunterladen. Dann entpacken Sie es in einen Ordner. Dort finden Sie eine setup.py-Datei. Führen Sie den Befehl dort aus, den die Site erwähnt hat. Zum Beispiel:

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

Zur Information: Ich habe versucht, Pycurl an meinen Fenstern zu installieren, aber ich konnte nicht. Aber habe es auf meinem Linux getan.

5
Sabuj Hassan

Ich verwende dies unter OS X und einige der oben genannten Lösungen funktionierten nicht. Ähnlich wie Edward Newells Kommentar schien die Variable PYCURL_SSL_LIBRARY vollständig ignoriert worden zu sein.
Weitere Lektüre des PycURL-Installationsdokument ergab Folgendes: 

pip kann das zuvor kompilierte Paket erneut installieren, anstatt pycurl mit neu angegebenen Optionen neu zu kompilieren

Daher musste ich es zwingen, mit zu kompilieren: 

pip install --compile pycurl 

Das funktioniert in einer Reihe von Fällen. Ich traf jedoch auf ein paar Systeme, die die Variable weiterhin ignorierten, so dass ich, ähnlich wie maharg101s Antwort , auf die Installationsoptionen zurückgegriffen habe, die durch pip so eingestellt werden können: 

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

wählen Sie dort eine der drei Optionen in den eckigen Klammern. Beachten Sie, dass die verfügbare Option ssl und nichtopenssl ist. Wenn Sie --with-openssl angeben, erhalten Sie eine Fehlermeldung. Beachten Sie auch, dass der letzte Befehl auf jeden Fall abgefangen wird, wenn Sie mit der PYCURL_SSL_LIBRARY-Variablen herumspielen und auf funky-Werte umschalten, um zu sehen, was passieren würde, wenn der Wert gesetzt ist, aber nicht gültig ist.

4
Gunga

Neuinstallation von curl

Ich habe jeden Vorschlag aus dieser Diskussion ausprobiert, aber niemand hat für mich gearbeitet. Als Lösung habe ich curl und curlib neu installiert. Danach konnte ich pycurl mit ssl-Unterstützung in der Umgebung installieren.

Am Anfang:

'PycURL/7.43.0 libcurl/7.47.0 GnuTLS/3.4.10 zlib/1.2.8 libidn/1.32 librtmp/2,3 '

Teil 1.Re/Installation mit pip

Zuerst habe ich pycurl mit pip aus virtualenv entfernt, wie in den vorherigen Antworten vorgeschlagen:

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

Die Idee hier ist, dass das Paket zwischengespeichert wurde und wir es einfach mit der Option openssl neu installieren. 

Ich habe auch versucht, Pycurl mit Pip neu zu kompilieren.

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

..aber hatte nach dem Laufen den gleichen Fehler:

python
import pycurl
pycurl.version

ImportError: pycurl: libcurl Link-Time-SSL-Backend ( gnutls ) ist unterscheidet sich vom Kompilierzeit-SSL-Backend ( openssl )

Teil 2. Installation von Teer

Nachdem die vorhergehende Methode nicht funktioniert hat, habe ich mich entschlossen, pycurl von tar mit zu installieren:

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

Pycurl wurde global installiert, jedoch nicht in virtualenv. Ich habe auch nicht geprüft, ob es mit SSL-Unterstützung installiert wurde oder nicht, aber ich denke, dass immer noch ohne SSL.

Teil 3. Neuinstallation von curl und curllib

Schließlich habe ich verstanden, dass pycurl nicht normal in der Umgebung installiert wird, da globales curl und libcurl mit gnutls kompiliert werden.

Bevor Sie beginnen, überprüfen Sie es mit:

curl-config --configure

Eine der Ausgangsleitungen wird sein

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

Um es neu zu kompilieren:

Entfernen Sie zuerst die Locke:

Sudo apt-get purge curl

Installieren Sie alle für curl erforderlichen Build-Abhängigkeiten

Sudo apt-get build-dep curl

Holen Sie sich die neuesten (ab dem 20. Dezember 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

Die üblichen Schritte zum Erstellen einer App aus dem Quellcode

./configure
./make
 Sudo make install

Wenn openssl korrekt installiert ist, wird es von configure automatisch gefunden. Die Ausgabe wird sein:

lockenversion: 7.51.0
Hosteinrichtung: x86_64-pc-linux-gnu
Installieren Sie das Präfix:/usr/local
Compiler: gcc
SSL-Unterstützung: aktiviert (OpenSSL) ...

Beheben Sie Probleme mit C-Level-Cache-Caches ("Shared Library Cache").

Sudo ldconfig

Versuchen Sie nun, pycurl innerhalb der Umgebung neu zu installieren:

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"

Das Ergebnis sollte sein:

python
import pycurl
pycurl.version

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

2

Das hat für mich funktioniert: 

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

1
user10148784

Error: 

ImportError: pycurl: libcurl link-time-ssl-backend (openssl) unterscheidet sich von compil-time-ssl-backend (none/other)

Dies funktionierte für mich, Mac 10.13, Python 3.5, pycurl-Import funktionierte nach der Installation so

pip3 uninstall pycurl;

pip3 install --compile --install-option="--with-openssl" pycurl
1
vairav

Nachdem ich mich lange Zeit damit beschäftigt hatte, stellte ich fest, dass Apple seit OS X 10.11 El Capitan keine OpenSSL-Header mehr enthält.

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
Whitebear

Ich habe alles hier auf macOS 10.13 ohne Erfolg versucht. Dann fand ich https://Gist.github.com/webinista/b4b6a4cf8f158431b2c5134630c2cbfe das funktionierte:

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

Dies funktionierte für mich sowohl bei der Verwendung einer Virtualenv als auch innerhalb einer Virtualenv.

1
Daryl Spitzer

Ich bin mir nicht sicher, ob dies auf eine virtuelle Umgebung zurückzuführen ist, aber auf CentOS 7 funktionierten diese Lösungen nicht für mich. Die kompilierten Objekte wurden bei der Neuinstallation immer noch aus dem Cache-Verzeichnis abgerufen. Wenn Sie das gleiche Problem haben, nachdem Sie hier andere Lösungen ausprobiert haben, versuchen Sie Folgendes:

pip uninstall pycurl
export PYCURL_SSL_LIBRARY=[nss|openssl|ssl|gnutls]
pip install pycurl --no-cache-dir
1
Robert Kelly

Für alle, die Probleme mit PyCharm CE unter macOS haben. Mojave, so habe ich es in venv zum Laufen gebracht:

  • version angeben: 7.43.0.1
  • Optionen: --install-option = - with-openssl --install-option = - openssl-dir =/usr/local/opt/openssl

 PyCharm Project Interpreter screen shot

1
fabe

Ich bin auf dieses Problem gestoßen und Sanket Jagtaps Antwort hat für mich gearbeitet. Ich habe die Antwort mit den meisten Stimmen versucht, aber es hat nicht funktioniert.

Meine alte Version von openssl ist 1.0.1t.

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

Ich baute das neueste openssl um und versuchte this answer. Schau dir das an.

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

Das hat bei mir funktioniert.

ich empfehle, dass Sie unser OpenSL neu installieren sollten.

0
F.allen
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
Sanket Jagtap

Dieser Link fasst den Grund für die Fehler zusammen und gibt eine klare Anweisung zur Behebung des Problems.

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

Das Problem trat für mich auf, als ich von El Captain zu High-Sierra aufrief.

0
hyukkyulee

Für Python 2.7

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

Für Python 3.5 installieren Sie auch das nächste:

Sudo apt-get install python3.5-dev

Laden Sie die neueste Quelle pycurl-7.43.0.tar.gz (md5) von pypi https://pypi.python.org/pypi/pycurl/7.43.0#downloads .__ herunter und führen Sie den nächsten Befehl aus:

python setup.py --with-openssl install

Sie können es auch in der Python-Umgebung tun:

(test_env)[email protected]:~/Downloads/pycurl-7.43.0$ python setup.py --with-openssl install
0

Folgendes arbeitete für mich mit 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
Samuel