SSL-Backend-Fehler bei Verwendung von OpenSSL

85

Ich habe versucht, pycurl mit pip in einer virtuellen Umgebung 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 eine Dokumentation gelesen, in der steht: "Um dies zu beheben, müssen Sie setup.py mitteilen, welches SSL-Backend verwendet wird" (Quelle), obwohl ich nicht sicher bin, wie dies zu tun ist, da ich pycurl mit pip installiert habe.

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

Vielen Dank

helloworld2013
quelle
1
Was ist dein Betriebssystem?
Evgenii

Antworten:

119

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

  • Entfernen Sie die vorhandene pycurlInstallation

    pip uninstall pycurl

  • Exportvariable mit Ihrem Link-Time-SSL-Backend (das oben geöffnet ist)

    export PYCURL_SSL_LIBRARY=openssl

  • dann, installieren Sie pycurlmit keinem Cache

    pip install pycurl --no-cache-dir

Es könnten auch andere Lösung gibt, aber dies funktioniert perfekt für mich auf ein virtualenvund pipInstallation.

helloworld2013
quelle
2
Danke, PYCURL_SSL_LIBRARY=opensslfunktioniert perfekt!
Knie
Für Benutzer von Mac OS X : Erinnern Sie sich nicht an die Verwendung set -x PYCURL_SSL_LIBRARY opensslanstelle von, export PYCURL_SSL_LIBRARY=opensslwenn Sie anstelle von Bash eine Fischkonsole verwenden .
Serge
13
pip install pycurl --no-cache-dir
Shuguang Yang
Vielen Dank. Ich habe eine Reihe möglicher Lösungen für dieses Problem durchgesehen. Diese Lösung hat beim ersten Mal funktioniert.
Matt Setter
Schritt für Schritt Virtualenv Installationsbeispiel yippeecode.com/view-code/343QWQT144/…
helloworld2013
75

Die Antwort von helloworld2013 ist korrekt, aber der Schlüssel stimmt mit der von pycurl erwarteten SSL-Bibliothek überein. Der Fehler ist ungefähr so:

pycurl: Das ssl-Backend für die libcurl-Verbindungszeit ( <bibliothek> ) unterscheidet sich vom ssl-Backend zur Kompilierungszeit ( <bibliothek> 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-Zeit-SSL-Backend ( nss ) unterscheidet sich vom Kompilierungs-SSL-Backend (openssl) ", daher war mein Fix:

pip uninstall pycurl
export PYCURL_SSL_LIBRARY=nss
pip install pycurl
DrStrangepork
quelle
1
Brillant . Dies sollte mehr Stimmen bekommen. Die ursprüngliche Antwort galt für einige Maschinen. Dies ist eine allgemeinere Methode, um das Problem je nach Plattform zu beheben.
Nishant
6
hmm das hat bei mir auf einem mac nicht funktioniert. Es scheint, PYCURL_SSL_LIBRARYals würde es völlig ignoriert. Das ssl-Backend zur Kompilierungszeit ist für mich immer "(none / other)", obwohl es echo PYCURL_SSL_LIBRARYgibt openssl.
Edward Newell
1
Wie @EdwardNewell funktionierte dieses Update unter Scientific Linux (Rhel) nicht für mich, obwohl ich nss für PYCURL_SSL_LIBRARY angegeben habe, bleibt das Backend (keine / andere)
Yondaime008
3
Auf dem Mac habe ich pycurlmit den Flags entfernt und installiert: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
Eigenein
2
Dies funktionierte jedoch nur mit den folgenden Optionen: pip install pycurl --compile --no-cache-dirunter CentOS 7.3.
Robert Yi
51

Mit OSX 10.13, einer von Brew 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
Michael Wilson
quelle
4
Ja, unter MacOS 10.13.1 (High Sierra) war das der Trick! Danke vielmals! Um neu zu installieren openssl:brew reinstall openssl
Denis Arnaud
1
Ich habe mein Problem damit behoben. Danke :)
JeongjinKim
1
Das Problem unter Mac OSX 10.13.4 wurde behoben! Danke dir.
user1192748
1
Danke dir! Auch mein Problem behoben. Mac OSX 10.13.4
Steven Church
2
Daryl tut mir leid das zu hören! Bei Mojave hat es wieder funktioniert, daher bin ich mir nicht sicher, was los ist.
Michael Wilson
24

Mit pip 7.1 können Sie Folgendes in Ihre Anforderungsdatei aufnehmen:

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

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

maharg101
quelle
1
Diese Lösung ist besser als das Exportieren einer Variablen und die Neuinstallation, da sie in der Datei "require.txt" freigegeben werden kann und nicht pro Benutzer wiederholt werden muss.
dfarrell07
1
Der Export hat unter CentOS 7 bei mir nicht funktioniert. Die Einstellung der globalen Option hat jedoch funktioniert. Vielen Dank!
Aaron Nguyen
Ich musste Ihre Lösung und die von @Michael Wilson kombinieren, damit sie unter macOS funktioniert. Sieht aus wie ein Krypto-Problem - einige Diskussionen hier: github.com/pyca/cryptography/issues/3489
kip2
19

Das hat bei mir funktioniert:

pip uninstall pycurl
export PYCURL_SSL_LIBRARY=nss
easy_install pycurl

Nichts davon hat bei mir funktioniert (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
JoelBondurant
quelle
1
Die easy_installOption war die einzige, die funktionierte. Ich verstehe nicht, warum das so kompliziert ist. Ich brauchte export PYCURL_SSL_LIBRARY=openssl. Meiner hat "none / other" für die kompilierte Bibliothek gemeldet.
CMCDragonkai
Ich bin gerade auf dieses Problem gestoßen und diese Lösung war die einzige, die für mich funktioniert hat.
Boudewijn Aasman
2
Nach meiner Erfahrung entfernt pip die alte Version von pucurl, die mit dem Betriebssystem installiert wurde (in meinem Fall Centos7.2), nicht vollständig. Pip hat /usr/lib64/python2.7/site-packages/pycurl.so und Egg-Info-Dateien aus der früheren Version nicht berührt. Easy_install hingegen löschte diese aus und legte Pycurl-Ei in Site-Pakete.
Sokhaty
Ugh, habe alles versucht und es hat nicht funktioniert. Dies funktionierte für mich, als meine ursprüngliche Fehlermeldung `` `ImportError: pycurl: libcurl Linkzeit ssl Backs (openssl) war anders als ssl Backend zur Kompilierungszeit (keine / andere)` ``
James McCormac
19

Die Methode zum Beheben der Pycurl nach dem Update von Mac OS High Sierra:

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

    brew install curl --with-openssl
  2. Installieren Sie pycurl mit der richtigen Build-Time-Umgebung und den richtigen Pfaden

    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
blass
quelle
2
Arbeitete für mich in High Sierra (mit einer virtuellen Umgebung).
Djangoat
1
Ja! Siehe auch diesen Artikel cscheng.info/2018/01/26/…
somecallitblues
Arbeitete für mich in High Sierra (mit einer virtuellen Umgebung), aber ich musste das --user Flag
user495732 Why Me
Vielen Dank!! Das war unglaublich hilfreich. Wenn Sie High Sierra ausführen und ein paar Stunden damit verbringen, ist dies die einzige Lösung, die funktioniert hat :)
Alessandro
Als ich die --userFlagge wie oben benutzte , bekam ich:Can not perform a '--user' install. User site-packages are not visible in this virtualenv.
Daryl Spitzer
10

Ich hatte dieses Problem seit Tagen. Mit Hilfe anderer Antworten hier (hauptsächlich von Alexander Tyapkov) habe ich es schließlich für AWS Elastic Beanstalk zum Laufen gebracht.

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: Bitte beachten Sie, dass Sie sicherstellen müssen, dass Sie die richtige Version von Python und PIP verwenden, da Sie sie sonst möglicherweise für Python 2.x kompilieren und v3.x verwenden.

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 versucht habe, Celery 4 mit Django 1.10 in Elastic Beanstalk zu konfigurieren. Wenn das dein Fall ist, habe ich einen vollständigen Blog-Beitrag darüber geschrieben .

Diego Jancic
quelle
ugh danke. Dieses Zeug kann ärgerlich sein, vor allem, weil eb-Konfigurationsdateien sehr launisch wirken und Ihnen niemals vernünftige Fehler (einschließlich Formatierungsproblemen) geben
Ian
Ich habe diese Antwort positiv bewertet, da sie mir sehr geholfen hat, ein ähnliches Problem bei der Installation von pycurl unter AWS zu lösen: stackoverflow.com/questions/51019622/…
Greg Holst
8

Ich bin auf CentOS 7. Ich habe alles oben Genannte ausprobiert und konnte nichts zum Laufen bringen. Es stellte sich heraus, dass ich diese als Root-Benutzer ausführen musste. Wenn Sie also Probleme haben, probieren Sie als Root-Benutzer eine der oben genannten Lösungen aus. Als Beispiel hat Folgendes für mich funktioniert:

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

Natürlich gelten alle üblichen Haftungsausschlüsse für die Ausführung als Root-Benutzer.

Hinweis: [nss | openssl | ssl | gnutls] im obigen Code bedeutet, dass Sie eine auswählen und die eckigen Klammern oder Pipes nicht einschließen. Die Person, die die ursprüngliche Frage gestellt hat, hätte openssl gewählt. In meinem speziellen Fall habe ich nss gewählt. Ihre Fehlermeldung sollte Ihnen sagen, welche Auswahl Sie treffen müssen.

2019 Bearbeiten: Wenn Sie dies tun, sudo pip installkann dies zu einem Problem bei der Systeminstallation von Python auf dem Computer führen. Versuchen Sie vielleicht, in einer virtuellen Python-Umgebung zu arbeiten, und installieren Sie die Pakete dort. Wenn das nicht funktioniert, ist der Sudo-Trick in meiner Antwort wahrscheinlich eine der letzten Optionen, die in Betracht gezogen werden müssen.

Alfonso
quelle
5

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

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

Zu Ihrer Information: Ich habe versucht, Pycurl an meinen Fenstern zu installieren, konnte es aber nicht. Aber habe es unter meinem Linux gemacht.

Sabuj Hassan
quelle
Vielen Dank für die Antwort, aber dies könnte nur für mich funktionieren, wenn ich die Installation nicht über eine virtuelle Umgebung und Pip
helloworld2013
@ Sabuj, um pycurl unter Windows zu installieren, verwenden Sie eines der Installationsprogramme auf dieser ausgezeichneten Website: lfd.uci.edu/~gohlke/pythonlibs/#pycurl
Adam
4

Ich verwende dies unter OS X und einige der oben genannten Lösungen funktionierten nicht. Ähnlich wie in Edward Newells KommentarPYCURL_SSL_LIBRARY schien die Variable völlig ignoriert worden zu sein.
Das weitere Lesen des PycURL-Installationsdokuments ergab Folgendes:

pip installiert möglicherweise das zuvor kompilierte Paket neu, anstatt pycurl mit neu angegebenen Optionen neu zu kompilieren

Deshalb musste ich es zwingen, zu kompilieren mit:

pip install --compile pycurl

Das funktioniert in einer Reihe von Fällen. Ich bin jedoch auf einige Systeme gestoßen , die die Variable weiterhin ignorierten. Daher habe ich , ähnlich wie bei der Antwort von maharg101 , auf die Installationsoptionen zurückgegriffen, die über pip wie folgt eingestellt werden können:

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

Hier wählen Sie eine der drei Optionen in den eckigen Klammern. Beachten Sie, dass die verfügbare Option ist sslund nicht openssl . Wenn Sie angeben --with-openssl, wird eine Fehlermeldung angezeigt. Beachten Sie auch, dass, wenn Sie mit der PYCURL_SSL_LIBRARYVariablen herumgespielt und sie auf funky Werte umgestellt haben, um zu sehen, was passieren würde, dieser letzte Befehl sie definitiv abfängt und einen Fehler auslöst, wenn der Wert festgelegt, aber nicht gültig ist.

Gunga
quelle
1
deinstalliere zuerst pycurl und pip install pycurl --global-option="--with-nss"arbeite für mich. Für die Aufzeichnung ist mein FehlerImportError: pycurl: libcurl link-time ssl backend (nss) is different from compile-time ssl backend (openssl)
ahyong
Danke @ahyong, der globale Optionstrick hat bei mir funktioniert, obwohl ich es während der Installation von tar ausprobiert habe, hat er mit pip funktioniert, aber nicht mit setup.py seltsam ...
Yondaime008
4

Neuinstallation der Locke

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

Erstens 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 openssl-Option neu installieren.

Ich habe auch versucht, Pycurl mit Pip neu zu kompilieren, indem ich:

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

..aber hatte den gleichen Fehler nach dem Ausführen:

python
import pycurl
pycurl.version

ImportError: pycurl: Das SSL-Backend zur Linkzeit für libcurl ( gnutls ) unterscheidet sich vom SSL-Backend zur Kompilierungszeit ( openssl ).

Teil 2. Installation aus Teer

Nachdem die vorherige Methode nicht funktioniert hat, habe ich beschlossen, Pycurl aus Teer zu installieren mit:

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 innerhalb von virtualenv. Ich habe auch nicht überprü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 Global 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'

So kompilieren Sie es neu:

Entfernen Sie zuerst die Locke:

sudo apt-get purge curl

Installieren Sie alle Build-Abhängigkeiten, die für das Curl erforderlich sind

sudo apt-get build-dep curl

Holen Sie sich die neueste Version (Stand: 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, findet configure es automatisch. Die Ausgabe wird sein:

Curl-Version: 7.51.0
Host-Setup: x86_64-pc-linux- gnu Installationspräfix
: / usr / local
Compiler: gcc
SSL-Unterstützung: aktiviert (OpenSSL) ...

Beheben Sie alle Probleme mit C-Level-Lib-Speicherort-Caches ("Cache für gemeinsam genutzte Bibliotheken").

sudo ldconfig

Versuchen Sie nun, pycurl in 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'

Alexander Tyapkov
quelle
3

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

  • Geben Sie die Version an: 7.43.0.1
  • Optionen: --install-option = - with-openssl --install-option = - openssl-dir = / usr / local / opt / openssl

Screenshot des PyCharm Project Interpreter

Fabe
quelle
1
Unter macOS Mojave musste ich Brew neu installieren, openssl neu installieren und dann pycurl installieren == 7.43.0.1 --install-option = - with-openssl --install-option = - openssl-dir = / usr / local / opt / openssl
user495732 Why Me
2

Das hat bei mir funktioniert:

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

user10148784
quelle
2

Ich habe hier alles unter MacOS 10.13 ohne Erfolg versucht. Dann fand ich https://gist.github.com/webinista/b4b6a4cf8f158431b2c5134630c2cbfe, was 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 ohne virtuelle Umgebung als auch innerhalb einer virtuellen Umgebung.

Daryl Spitzer
quelle
1

Ich bin mir nicht sicher, ob dies auf die Ausführung in einer virtuellen Umgebung zurückzuführen ist, aber unter CentOS 7 funktionierten diese Lösungen bei mir nicht. Die kompilierten Objekte wurden bei der Neuinstallation immer noch aus dem Cache-Verzeichnis abgerufen. Wenn Sie auf dasselbe Problem stoßen, 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
Robert Kelly
quelle
Unter CentOS 7 funktionierte es nicht, bis ich die --no-cahe-dirOption hinzufügte . su -Ich möchte nur weiter erwähnen, dass es nur gelungen ist, unter root mit zu laufen, wie @alfonso vorgeschlagen hat. Das sudo pip3 ...war nicht gut genug. Wahrscheinlich notwendig, damit die Umgebungsvariable erfasst werden kann.
Nagev
1

Error:

ImportError: pycurl: Das SSL-Backend zur Zeit der libcurl-Linkzeit (openssl) unterscheidet sich vom SSL-Backend zur Kompilierungszeit (keine / andere).

Dies funktionierte für mich, Mac 10.13, Python 3.5, Pycurl-Import funktionierte nach der Installation wie folgt

pip3 uninstall pycurl;

pip3 install --compile --install-option="--with-openssl" pycurl
vairav
quelle
Dies funktionierte auch für mich unter Python 2.7.10 in High Sierra.
Skyler
1

Nachdem ich lange daran festgehalten hatte, stellte ich fest, dass Apple seit OS X 10.11 El Capitan keine OpenSSL-Header mehr enthält. wie repariert man?

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
Weißer Bär
quelle
Klar, ich habe viel Zeit gebraucht, damit es funktioniert, ziemlich nervig muss ich sagen. Habe Spaß!!
Whitebear
0

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 folgende:

sudo apt-get install python3.5-dev

Laden Sie die neueste Quelle von 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 dies auch in einer Python-Umgebung tun:

(test_env)user@pc:~/Downloads/pycurl-7.43.0$ python setup.py --with-openssl install
Andrew Nodermann
quelle
0
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
Sanket Jagtap
quelle
0

Ich bin auf dieses Problem gestoßen und Sanket Jagtaps Antwort hat bei mir funktioniert. Ich habe die Antwort mit den meisten Stimmen versucht, aber es hat nicht funktioniert.

Meine alte openssl-Version ist 1.0.1t. Ich denke, eine Neuinstallation von openssl kann dieses Problem lösen.

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

Ich habe das neueste openssl neu erstellt und diese Antwort ausprobiert . Überprüfen Sie dies heraus.

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

Das hat bei mir funktioniert.

Ich empfehle, wir sollten unser openssl neu installieren, um es zu versuchen.

Gefallen
quelle
0

Das Folgende hat bei mir mit Python3.6 funktioniert

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
Samuel
quelle
0

Gleiches Problem unter amazonlinux - behoben
Ich hatte dieses Problem, als ich ein Docker-Image basierend auf amazonlinux erstellte, python3.7 installierte und das pycurl-Modul hinzufügte. Alle anderen Python-Module außer pycurl wurden korrekt installiert. Nachdem ich viele der in den mit diesem Problem verknüpften Threads vorgeschlagenen Lösungen ausprobiert hatte, löste ich mein Problem schließlich, indem ich die folgenden Befehle für die Installation aller Teile verwendete.
yum -y install python3 python3-devel gcc libcurl-devel aws-cli openssl-static.x86_64
installierte dann andere Module wie psycopg2-binary, Anfragen, Zertifikate mit:
pip3 install --user --no-cache-dir -r requirements.txt

und schließlich installiert pycurl Modul mit:

pip3 install --user --global-option="--with-openssl" --no-cache-dir pycurl
und hier die globale Option openssl übergeben. Die Installation der statischen Bibliothek openssl-static.x86_64 löste das Problem in meinem Fall durch die Verwendung der globalen Option, die vom zweiten Befehl pip3 verwendet wird.

rimetnac
quelle
0

FWIW, ich hatte viele Probleme damit, dass dies über AWS Elastic Beanstalk funktioniert, und konnte es schließlich zum Laufen bringen mit:

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
Sean Chon
quelle
0

Kürzlich hatte ich beim Upgrade eines Django-Projekts den ähnlichen Fehler. Diesmal funktionierte das Einstellen der Umgebungsvariablen jedoch nicht. Also musste ich beide Umgebungsvariablen setzen export PYCURL_SSL_LIBRARY=opensslund das Flag übergeben --global-option="with-openssl".

Die ursprüngliche Antwort wurde auf dieser Seite veröffentlicht

helloworld2013
quelle
-1
export CPPFLAGS=-I/usr/local/opt/openssl/include
export LDFLAGS=-L/usr/local/opt/openssl/lib

pip install pycurl --global-option="--with-openssl"
Evgenii
quelle