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
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.
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
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
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.
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
Die Methode zum Beheben des Pycurl nach einem Mac OS High Sierra-Update:
Installieren Sie die Curl-Bibliotheken erneut, um OpenSSL anstelle von SecureTransport zu verwenden.
brew install curl --with-openssl
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
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.
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 .
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.
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.
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'
Das hat für mich funktioniert:
pip install --compile --install-option = "- with-openssl" pycurl
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
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
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.
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
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.
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
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.
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
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