Saya mencoba menginstal pycurl di virtualenv menggunakan pip dan saya mendapat kesalahan ini
ImportError: pycurl: libcurl link-time ssl backend (openssl) is different from compile-time ssl backend (none/other)
Saya membaca beberapa dokumentasi yang mengatakan bahwa "Untuk memperbaiki ini, Anda perlu memberi tahu setup.py apa backend SSL yang digunakan" (sumber) meskipun saya tidak yakin bagaimana melakukan ini karena saya menginstal pycurl menggunakan pip.
Bagaimana saya bisa menentukan backend SSL saat menginstal pycurl dengan pip?
Terima kasih
Jawaban:
Setelah membaca file INSTALASI mereka, saya dapat menyelesaikan masalah saya dengan mengatur variabel lingkungan dan melakukan instal ulang
hapus
pycurl
instalasi yang adapip uninstall pycurl
ekspor variabel dengan backend ssl waktu tautan Anda (yang terbuka di atas)
export PYCURL_SSL_LIBRARY=openssl
kemudian, re-install
pycurl
dengan ada cachepip install pycurl --no-cache-dir
Mungkin ada solusi lain di luar sana tetapi ini bekerja dengan sempurna untuk saya pada instalasi
virtualenv
danpip
.sumber
PYCURL_SSL_LIBRARY=openssl
bekerja dengan sempurna!set -x PYCURL_SSL_LIBRARY openssl
daripadaexport PYCURL_SSL_LIBRARY=openssl
jika Anda menggunakan konsol ikan daripada bash .Jawaban helloworld2013 benar, tetapi kuncinya cocok dengan pustaka SSL yang diharapkan pycurl. Kesalahannya akan seperti ini:
pycurl: libcurl link-time ssl backend ( <library> ) berbeda dengan backend ssl waktu kompilasi ( <library> atau " none / other ")
Untuk memperbaikinya, Anda harus menggunakan library yang diharapkan pycurl. Dalam kasus saya, kesalahan saya adalah " pycurl: libcurl link-time ssl backend ( nss ) berbeda dari waktu kompilasi ssl backend (openssl) ", jadi perbaikan saya adalah:
sumber
PYCURL_SSL_LIBRARY
benar-benar diabaikan. Backend ssl waktu kompilasi selalu "(tidak ada / lainnya)" untuk saya, meskipunecho PYCURL_SSL_LIBRARY
memberiopenssl
.pycurl
dan menginstal dengan bendera: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
di CentOS 7.3.Dengan macOS 10.13, openSSL yang diinstal bir, dan virtualenv, saya berhasil dengan:
# cd to your virtualenv, then… 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
sumber
brew reinstall openssl
Dengan pip 7.1 Anda dapat meletakkan yang berikut ini di file persyaratan Anda:
pycurl==7.19.5.1 --global-option="--with-nss"
Cukup ganti nss dengan pustaka backend ssl yang relevan.
sumber
Metode untuk memperbaiki pycurl setelah pembaruan Mac OS High Sierra:
Instal ulang pustaka curl untuk menggunakan OpenSSL, bukan SecureTransport
brew install curl --with-openssl
Instal pycurl dengan lingkungan dan jalur waktu pembuatan yang benar
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
sumber
--user
bendera seperti di atas, saya mendapat:Can not perform a '--user' install. User site-packages are not visible in this virtualenv.
Ini berhasil untuk saya:
Tidak ada yang berhasil untuk saya (perhatikan perbedaannya hanya 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
sumber
easy_install
pilihan adalah satu-satunya yang bekerja. Saya tidak mengerti mengapa ini begitu rumit. Saya membutuhkanexport PYCURL_SSL_LIBRARY=openssl
. Satu saya melaporkan "tidak ada / lainnya" untuk perpustakaan yang dikompilasi.Saya mengalami masalah ini selama berhari-hari. Akhirnya dengan bantuan jawaban lain di sini (terutama Alexander Tyapkov) saya membuatnya berfungsi untuk AWS Elastic Beanstalk.
Instal manual (terhubung dengan 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"
PENTING: Harap dicatat bahwa Anda harus memastikan bahwa Anda menggunakan versi Python dan PIP saat ini, jika tidak, Anda mungkin akan mengompilasinya untuk Python 2.x dan menggunakan v3.x.
Instal otomatis di 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'
Saya mengalami masalah ini karena saya mencoba mengkonfigurasi Celery 4 dengan Django 1.10 di Elastic Beanstalk. Jika itu kasus Anda, saya menulis posting blog lengkap tentang itu .
sumber
Saya menggunakan CentOS 7. Saya mencoba semua cara di atas dan tidak bisa mendapatkan apa pun untuk berfungsi. Ternyata saya perlu menjalankan ini sebagai pengguna root. Jadi jika Anda mengalami masalah, coba salah satu solusi di atas sebagai pengguna root. Sebagai contoh, inilah yang berhasil untuk saya:
Tentu saja, semua penafian biasa tentang menjalankan sebagai pengguna root berlaku.
Catatan: [nss | openssl | ssl | gnutls] pada kode di atas berarti memilih satu, dan tidak menyertakan tanda kurung siku atau pipa. Orang yang menanyakan pertanyaan awal akan memilih openssl. Dalam kasus khusus saya, saya memilih nss. Pesan kesalahan Anda harus memberi tahu Anda pilihan mana yang harus dibuat.
Edit 2019: Melakukannya
sudo pip install
dapat menyebabkan masalah dengan pemasangan sistem mesin Python. Mungkin mencoba bekerja di lingkungan virtual Python dan menginstal paket di sana. Jika itu tidak berhasil, trik sudo dalam jawaban saya mungkin adalah salah satu opsi terakhir untuk dipertimbangkan.sumber
Anda dapat mengunduh file tar.gz dari sini . Kemudian ekstrak ke dalam folder. Anda akan menemukan file setup.py di sana. Jalankan perintah di sana yang disebutkan situs tersebut. Sebagai contoh:
python setup.py --with-[ssl|gnutls|nss] install
FYI: Saya mencoba menginstal pycurl di windows saya, tetapi saya tidak bisa. Tapi melakukannya di linux saya.
sumber
Saya menjalankan ini di OS X dan beberapa solusi di atas tidak berfungsi. Mirip dengan komentar Edward Newell yang
PYCURL_SSL_LIBRARY
variabel tampaknya telah benar-benar diabaikan.Bacaan lebih lanjut dari dokumen instalasi PycURL mengungkapkan hal-hal berikut:
Oleh karena itu, saya harus memaksanya untuk dikompilasi dengan:
pip install --compile pycurl
Itu bekerja pada sejumlah kasus. Namun, saya mengalami beberapa sistem yang terus mengabaikan variabel jadi, mirip dengan jawaban maharg101 , saya menggunakan opsi instal yang melalui pip dapat diatur seperti ini:
pip install pycurl --global-option="--with-[ssl|gnutls|nss]"
di mana Anda memilih salah satu dari tiga opsi di dalam tanda kurung siku. Perhatikan bahwa opsi yang tersedia adalah
ssl
dan tidakopenssl
. Jika Anda menentukan,--with-openssl
Anda akan mendapatkan kesalahan. Perhatikan juga bahwa jika Anda mengotak-atikPYCURL_SSL_LIBRARY
variabel dan mengubahnya menjadi nilai yang funky untuk melihat apa yang akan terjadi, perintah terakhir ini pasti akan menangkapnya dan menimbulkan kesalahan jika nilainya disetel tetapi tidak valid.sumber
pip install pycurl --global-option="--with-nss"
pekerjaan untuk saya. Sebagai catatan, kesalahan saya adalahImportError: pycurl: libcurl link-time ssl backend (nss) is different from compile-time ssl backend (openssl)
Pemasangan ulang curl
Saya mencoba setiap saran dari diskusi ini tetapi tidak ada yang berhasil untuk saya. Sebagai solusi, saya telah menginstal ulang curl dan curlib. Setelah itu saya dapat menginstal pycurl dengan dukungan ssl di dalam lingkungan.
Di mulai:
Bagian 1. Re/Installation dengan pip
Pertama saya telah menghapus pycurl dari virtualenv menggunakan pip seperti yang disarankan jawaban sebelumnya:
pip uninstall pycurl export PYCURL_SSL_LIBRARY=openssl pip install pycurl --global-option="--with-openssl"
Idenya di sini adalah bahwa paket telah di-cache dan kami hanya menginstal ulang dengan opsi openssl.
Saya juga mencoba mengkompilasi ulang pycurl dengan pip menggunakan:
pip install pycurl --compile pycurl --no-cache
..tetapi mengalami kesalahan yang sama setelah menjalankan:
python import pycurl pycurl.version
Bagian 2. Instalasi dari tar
Setelah metode sebelumnya tidak berhasil, saya telah memutuskan untuk menginstal pycurl dari tar dengan:
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
Ini telah menginstal pycurl secara global tetapi tidak dalam virtualenv. Saya juga tidak memeriksa apakah itu diinstal dengan dukungan SSL atau tidak tetapi berpikir itu masih tanpa ssl.
Bagian 3. Pemasangan ulang curl dan curllib
Akhirnya saya mengerti bahwa pycurl tidak menginstal secara normal ke dalam lingkungan karena global curl dan libcurl dikompilasi dengan gnutls.
Sebelum memulai, periksa dengan:
Salah satu jalur keluaran akan menjadi
Untuk mengkompilasi ulang:
Pertama-tama hapus ikal:
Instal semua dependensi build yang diperlukan untuk curl
Dapatkan libcurl terbaru (per 20 Des 2016)
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
Langkah-langkah biasa untuk membuat aplikasi dari sumber
Jika openssl diinstal dengan benar, maka konfigurasi akan menemukannya secara otomatis. Outputnya adalah:
Selesaikan masalah apa pun dari cache lokasi lib tingkat C ("cache perpustakaan bersama")
Sekarang coba instal ulang pycurl dalam lingkungan:
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"
Hasilnya harus:
python import pycurl pycurl.version
sumber
Bagi siapa pun yang mengalami masalah di dalam PyCharm CE di macOS Mojave, inilah cara saya membuatnya berfungsi di venv:
sumber
Saya mencoba semuanya di sini di macOS 10.13 tetapi tidak berhasil. Kemudian saya menemukan https://gist.github.com/webinista/b4b6a4cf8f158431b2c5134630c2cbfe yang berfungsi:
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
Ini bekerja untuk saya baik ketika tidak menggunakan virtualenv dan dalam virtualenv.
sumber
Ini berhasil untuk saya:
sumber
Tidak yakin apakah ini karena berjalan di virtualenv, tetapi di CentOS 7 solusi ini tidak berfungsi untuk saya; objek yang dikompilasi masih diambil dari dir cache saat saya menginstal ulang. Jika Anda mengalami masalah yang sama setelah mencoba solusi lain di sini, coba yang berikut ini:
pip uninstall pycurl export PYCURL_SSL_LIBRARY=[nss|openssl|ssl|gnutls] pip install pycurl --no-cache-dir
sumber
--no-cahe-dir
opsi. Hanya ingin menyebutkan lebih lanjut bahwa itu hanya berhasil berjalan di bawah rootsu -
seperti yang disarankan @alfonso. Melakukansudo pip3 ...
tidak cukup baik. Mungkin perlu agar variabel lingkungan diambil.Kesalahan:
Ini bekerja untuk saya, Mac 10.13, python 3.5, pycurl import bekerja setelah menginstal seperti ini
pip3 uninstall pycurl; pip3 install --compile --install-option="--with-openssl" pycurl
sumber
Setelah terjebak dalam hal ini untuk waktu yang lama, saya menemukan bahwa apel berhenti termasuk header OpenSSL sejak OS X 10.11 El Capitan. bagaimana cara memperbaiki?
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
sumber
Masalah yang sama di amazonlinux - terpecahkan
Saya mengalami masalah ini saat membuat gambar buruh pelabuhan berdasarkan amazonlinux, menginstal python3.7 dan menambahkan modul pycurl. Semua modul python lainnya dipasang dengan benar kecuali pycurl. Setelah mencoba banyak solusi yang diusulkan di utas yang terkait dengan masalah ini, saya akhirnya memecahkan masalah saya dengan menggunakan perintah berikut untuk pemasangan semua bagian.
yum -y install python3 python3-devel gcc libcurl-devel aws-cli openssl-static.x86_64
kemudian instal modul lain seperti psycopg2-binary, request, certifi menggunakan:
pip3 install --user --no-cache-dir -r requirements.txt
dan terakhir memasang modul pycurl menggunakan:
pip3 install --user --global-option="--with-openssl" --no-cache-dir pycurl
dan lewat sini opsi global openssl. Instalasi pustaka statis openssl-static.x86_64 memecahkan masalah dalam kasus saya karena menggunakan opsi global yang digunakan oleh perintah pip3 kedua.
sumber
Untuk python 2.7
Untuk python 3.5 juga instal selanjutnya:
sudo apt-get install python3.5-dev
Unduh Sumber pycurl-7.43.0.tar.gz (md5) terbaru dari pypi https://pypi.python.org/pypi/pycurl/7.43.0#downloads dan jalankan perintah berikutnya:
python setup.py --with-openssl install
Anda juga dapat melakukannya ke lingkungan python:
(test_env)user@pc:~/Downloads/pycurl-7.43.0$ python setup.py --with-openssl install
sumber
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
sumber
Saya mengalami masalah ini dan jawaban Sanket Jagtap berhasil untuk saya. Saya mencoba jawaban dengan jawaban terbanyak tetapi tidak berhasil.
Versi lama openssl saya adalah 1.0.1t, saya pikir menginstal ulang openssl dapat menyelesaikan masalah ini.
--- pycurl's openssl backend time....
Saya membangun kembali openssl terbaru dan mencoba jawaban ini . Lihat ini.
pip install --compile --install-option="--with-openssl" pycurl
Ini berhasil untuk saya.
saya sarankan kami harus menginstal ulang openssl kami untuk mencoba ..
sumber
Mengikuti berhasil untuk saya dengan 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
sumber
Tautan ini merangkum alasan mengapa kesalahan terjadi dan memberikan instruksi yang jelas untuk memperbaiki masalah tersebut.
https://cscheng.info/2018/01/26/installing-pycurl-on-macos-high-sierra.html
Bagi saya, masalah terjadi ketika saya meningkatkan ke High-Sierra dari El Captain.
sumber
FWIW, saya mengalami banyak masalah agar ini berfungsi melalui AWS Elastic Beanstalk dan akhirnya bisa membuatnya berfungsi dengan:
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
sumber
Baru-baru ini ketika memutakhirkan proyek Django saya mengalami kesalahan yang serupa. Tapi kali ini pengaturan variabel lingkungan tidak berhasil. Jadi saya harus mengatur kedua variabel lingkungan
export PYCURL_SSL_LIBRARY=openssl
dan meneruskan bendera--global-option="with-openssl"
.Jawaban asli telah diposting di halaman ini
sumber
export CPPFLAGS=-I/usr/local/opt/openssl/include export LDFLAGS=-L/usr/local/opt/openssl/lib pip install pycurl --global-option="--with-openssl"
sumber