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
Antworten:
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
pycurl
Installationpip uninstall pycurl
Exportvariable mit Ihrem Link-Time-SSL-Backend (das oben geöffnet ist)
export PYCURL_SSL_LIBRARY=openssl
dann, installieren Sie
pycurl
mit keinem Cachepip install pycurl --no-cache-dir
Es könnten auch andere Lösung gibt, aber dies funktioniert perfekt für mich auf ein
virtualenv
undpip
Installation.quelle
PYCURL_SSL_LIBRARY=openssl
funktioniert perfekt!set -x PYCURL_SSL_LIBRARY openssl
anstelle von,export PYCURL_SSL_LIBRARY=openssl
wenn Sie anstelle von Bash eine Fischkonsole verwenden .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:
quelle
PYCURL_SSL_LIBRARY
als würde es völlig ignoriert. Das ssl-Backend zur Kompilierungszeit ist für mich immer "(none / other)", obwohl esecho PYCURL_SSL_LIBRARY
gibtopenssl
.pycurl
mit 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
pip install pycurl --compile --no-cache-dir
unter CentOS 7.3.Mit OSX 10.13, einer von Brew installierten openSSL und virtualenv war ich erfolgreich mit:
quelle
brew reinstall openssl
Mit pip 7.1 können Sie Folgendes in Ihre Anforderungsdatei aufnehmen:
Ersetzen Sie einfach nss durch die entsprechende SSL-Backend-Bibliothek.
quelle
Das hat bei mir funktioniert:
Nichts davon hat bei mir funktioniert (beachten Sie, dass der Unterschied einfach easy_install vs pip ist):
quelle
easy_install
Option war die einzige, die funktionierte. Ich verstehe nicht, warum das so kompliziert ist. Ich brauchteexport PYCURL_SSL_LIBRARY=openssl
. Meiner hat "none / other" für die kompilierte Bibliothek gemeldet.Die Methode zum Beheben der Pycurl nach dem Update von Mac OS High Sierra:
Installieren Sie die Curl-Bibliotheken neu, um OpenSSL anstelle von SecureTransport zu verwenden
Installieren Sie pycurl mit der richtigen Build-Time-Umgebung und den richtigen Pfaden
quelle
--user
Flagge wie oben benutzte , bekam ich:Can not perform a '--user' install. User site-packages are not visible in this virtualenv.
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):
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:
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 .
quelle
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:
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 install
kann 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.quelle
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:
Zu Ihrer Information: Ich habe versucht, Pycurl an meinen Fenstern zu installieren, konnte es aber nicht. Aber habe es unter meinem Linux gemacht.
quelle
Ich verwende dies unter OS X und einige der oben genannten Lösungen funktionierten nicht. Ähnlich wie in Edward Newells Kommentar
PYCURL_SSL_LIBRARY
schien die Variable völlig ignoriert worden zu sein.Das weitere Lesen des PycURL-Installationsdokuments ergab Folgendes:
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
ssl
und nichtopenssl
. Wenn Sie angeben--with-openssl
, wird eine Fehlermeldung angezeigt. Beachten Sie auch, dass, wenn Sie mit derPYCURL_SSL_LIBRARY
Variablen 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.quelle
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)
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:
Teil 1.Re/Installation mit pip
Erstens habe ich pycurl mit pip aus virtualenv entfernt, wie in den vorherigen Antworten vorgeschlagen:
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:
..aber hatte den gleichen Fehler nach dem Ausführen:
Teil 2. Installation aus Teer
Nachdem die vorherige Methode nicht funktioniert hat, habe ich beschlossen, Pycurl aus Teer zu installieren mit:
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:
Eine der Ausgangsleitungen wird sein
So kompilieren Sie es neu:
Entfernen Sie zuerst die Locke:
Installieren Sie alle Build-Abhängigkeiten, die für das Curl erforderlich sind
Holen Sie sich die neueste Version (Stand: 20. Dezember 2016) libcurl
Die üblichen Schritte zum Erstellen einer App aus dem Quellcode
Wenn openssl korrekt installiert ist, findet configure es automatisch. Die Ausgabe wird sein:
Beheben Sie alle Probleme mit C-Level-Lib-Speicherort-Caches ("Cache für gemeinsam genutzte Bibliotheken").
Versuchen Sie nun, pycurl in der Umgebung neu zu installieren:
Das Ergebnis sollte sein:
quelle
Für alle, die Probleme mit PyCharm CE unter macOS Mojave haben, habe ich es so in venv zum Laufen gebracht:
quelle
Das hat bei mir funktioniert:
quelle
Ich habe hier alles unter MacOS 10.13 ohne Erfolg versucht. Dann fand ich https://gist.github.com/webinista/b4b6a4cf8f158431b2c5134630c2cbfe, was funktionierte:
Dies funktionierte für mich sowohl ohne virtuelle Umgebung als auch innerhalb einer virtuellen Umgebung.
quelle
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:
quelle
--no-cahe-dir
Option hinzufügte .su -
Ich möchte nur weiter erwähnen, dass es nur gelungen ist, unter root mit zu laufen, wie @alfonso vorgeschlagen hat. Dassudo pip3 ...
war nicht gut genug. Wahrscheinlich notwendig, damit die Umgebungsvariable erfasst werden kann.Error:
Dies funktionierte für mich, Mac 10.13, Python 3.5, Pycurl-Import funktionierte nach der Installation wie folgt
quelle
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?
quelle
Für Python 2.7
Für Python 3.5 installieren Sie auch das folgende:
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:
Sie können dies auch in einer Python-Umgebung tun:
quelle
quelle
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.
Ich habe das neueste openssl neu erstellt und diese Antwort ausprobiert . Überprüfen Sie dies heraus.
Das hat bei mir funktioniert.
Ich empfehle, wir sollten unser openssl neu installieren, um es zu versuchen.
quelle
Das Folgende hat bei mir mit Python3.6 funktioniert
MacOS High-Sierra
CentOS 7
quelle
Dieser Link fasst den Grund für das Auftreten der Fehler zusammen und gibt eine klare Anweisung zur Behebung des Problems.
https://cscheng.info/2018/01/26/installing-pycurl-on-macos-high-sierra.html
Für mich trat das Problem auf, als ich von El Captain auf High-Sierra umstieg.
quelle
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.
quelle
FWIW, ich hatte viele Probleme damit, dass dies über AWS Elastic Beanstalk funktioniert, und konnte es schließlich zum Laufen bringen mit:
quelle
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=openssl
und das Flag übergeben--global-option="with-openssl"
.Die ursprüngliche Antwort wurde auf dieser Seite veröffentlicht
quelle
quelle