Tidak dapat menginstal paket Python [SSL: TLSV1_ALERT_PROTOCOL_VERSION]

167

Saya mencoba menginstal pustaka Python menggunakan pip, mendapatkan kesalahan SSL:

~/projects/base  pre-master±  pip install xdict

Collecting xdict
  Could not fetch URL https://pypi.python.org/simple/xdict/: There was a problem confirming the ssl certificate: [SSL: TLSV1_ALERT_PROTOCOL_VERSION] tlsv1 alert protocol version (_ssl.c:590) - skipping
  Could not find a version that satisfies the requirement xdict (from versions: )
No matching distribution found for xdict

versi pip: pip 9.0.1

Bagaimana cara memperbaiki kesalahan ini?

Nishant Nawarkhede
sumber
1
Ikuti jawaban ini stackoverflow.com/a/46808948/2419644
Mitul Shah
Kemungkinan rangkap dari Tidak dapat menginstal pustaka python
phd

Jawaban:

443

Tingkatkan pip sebagai berikut:

curl https://bootstrap.pypa.io/get-pip.py | python

Catatan: Anda mungkin perlu menggunakan di sudo pythonatas jika tidak dalam lingkungan virtual.

(Perhatikan bahwa peningkatan pipmenggunakan pipyaitu pip install --upgrade pipjuga tidak akan memutakhirkan dengan benar. Ini hanya masalah ayam dan telur. Tidak pipakan berfungsi kecuali menggunakan TLS> = 1.2.)

Seperti disebutkan dalam jawaban terperinci ini , ini disebabkan oleh penghentian TLS baru-baru ini untuk pip. Situs Python.org telah menghentikan dukungan untuk TLS versi 1.0 dan 1.1.

Dari halaman status Python:

Selesai - Brownout bergulir selesai, dan TLSv1.0 dan TLSv1.1 telah dinonaktifkan. 11 Apr, 15:37 UTC


Untuk pengguna PyCharm (virtualenv):

  1. Jalankan lingkungan virtual dengan shell. (ganti "./venv/bin/activate" ke jalur Anda sendiri)

    source ./venv/bin/activate
  2. Jalankan peningkatan

    curl https://bootstrap.pypa.io/get-pip.py | python
  3. Mulai ulang instance PyCharm Anda, dan periksa interpreter Python Anda di Preferensi .

Anupam
sumber
2
Ini berhasil untuk saya! Saya harus menambahkan sudodi depan karena izin ditolak kesalahan. Terima kasih!
Simar
34
Membutuhkan sudo untuk bekerja: curl https://bootstrap.pypa.io/get-pip.py | sudo python
Wallace
2
@Simar @ Wallall ya, mungkin memerlukan sudojika tidak dalam lingkungan virtual. Menambahkan sedikit itu juga di jawabannya sekarang.
Anupam
1
Jika Anda tidak berada di lingkungan virtual, Anda mungkin perlu menentukan path ke biner python Anda, seperti yang disebutkan Ilya di bawah ini
Chris
2
Di OSX ini bekerja lebih baik untuk sayacurl https://bootstrap.pypa.io/get-pip.py | sudo -H python3
nick fox
26

Tetapi jika curlperintah itu sendiri gagal dengan kesalahan, atau "tlsv1 alert protokol versi" tetap ada bahkan setelah upgrade pip, itu berarti sistem pustaka OpenSSL yang mendasari versi Anda < 1.0.1atau versi Python < 2.7.9(atau < 3.4dengan Python 3) tidak mendukung protokol TLS 1.2 yang lebih baru yang pipperlu terhubung ke PyPI sejak sekitar setahun yang lalu . Anda dapat dengan mudah memeriksanya dengan juru bahasa Python:

>>> import ssl
>>> ssl.OPENSSL_VERSION
'OpenSSL 0.9.8o 01 Jun 2010'
>>> ssl.PROTOCOL_TLSv1_2
 AttributeError: 'module' object has no attribute 'PROTOCOL_TLSv1_2'

The AttributeError(bukan yang diharapkan '5') berarti sslmodul Python stdlib Anda , dikompilasi dengan lib openssl lama, tidak memiliki dukungan untuk protokol TLSv1.2 (bahkan jika perpustakaan openssl dapat atau dapat diperbarui nanti).

Untungnya, ini dapat diselesaikan tanpa memutakhirkan Python (dan seluruh sistem), dengan menginstal paket Python tambahan secara manual - panduan langkah demi langkah yang terperinci tersedia di Stackoverflow .

Catatan, curldan pipdan wgetsemua tergantung pada lib OpenSSL yang sama untuk membuat koneksi SSL (gunakan $ openssl versionperintah). libcurl mendukung TLS 1.2 sejak curl versi 7.34 , tetapi versi curl yang lebih lama harus dapat terhubung jika Anda memiliki OpenSSL versi 1.0.2 (atau lebih baru).


PS
Untuk Python 3 , silakan gunakan python3dan di pip3mana saja (kecuali Anda berada di venv / virtualenv), termasuk curlperintah dari atas :
$ curl https://bootstrap.pypa.io/get-pip.py | python3 --user

Alex C.
sumber
4
Saya juga menyadari bahwa saya harus menjalankan pip3, bukan hanya pip- memeriksa versi dengan perintah -Vuntuk memastikan Anda menjalankan pip yang benar !!
Jan
9

Mengikuti jawaban Anupam pada OS X menghasilkan kesalahan berikut untuk saya, terlepas dari izin yang saya gunakan untuk menjalankannya:

Tidak dapat menginstal paket karena EnvironmentError: [Errno 13] Izin ditolak: ...

Apa yang akhirnya berhasil adalah mengunduh paket pip yang lebih baru (9.0.3) dari PyPI langsung dari browser saya - https://pypi.org/simple/pip/ , ekstrak kontennya, lalu pip instal paket tersebut secara lokal:

pip install ./pip-9.0.3/

Ini memperbaiki [SSL: TLSV1_ALERT_PROTOCOL_VERSION]kesalahan saya .

T Dub
sumber
7

Solusi @Anupam bekerja untuk saya. Namun, saya harus menggunakan sudodan menentukan lokasi yang tepat dari lingkungan Python virtual saya:

curl https://bootstrap.pypa.io/get-pip.py | sudo /Users/{your user name}/{path to python}/bin/python
Ilya Gazman
sumber
6

Untuk meningkatkan versi lokal saya menggunakan sedikit variasi:

curl https://bootstrap.pypa.io/get-pip.py | python - --user

Masalah ini muncul jika Anda menyimpan pip dan paket Anda di bawah direktori home Anda seperti yang dijelaskan dalam intisari ini .

Hbar
sumber
5

Solusi berikut ini berhasil untuk saya:

brew install python2

Itu juga ditingkatkan pipke versi 1.10.1

Monish Lalchandani
sumber
^ yang satu ini bagi kita yang tidak menggunakan python default di OSX. Saya kira pertanyaannya bukan OSX spesifik, tetapi bagaimanapun, jika Anda tidak menjalankan Linux, ini berfungsi --- kecuali jika Anda menulis konten melalui sistem yang diinstal Python.
jar
Yang ini bekerja untuk saya, saya menggunakan python di OSX. Situasi saya, saya menghabiskan seminggu mencoba menginstal paket pip dan gagal. Saya mencopot pip dan mulai saat ini saya tidak dapat melakukan apa-apa sampai saya mendapatkan perintah ini yang menginstal pip untuk saya. Terima kasih!
amm
3

Periksa versi TLS Anda:

python2 -c "import urllib2,json; print(json.loads(urllib2.urlopen('https://www.howsmyssl.com/a/check').read())['tls_version'])"

Jika versi TLS Anda kurang dari 1,2, Anda harus memutakhirkannya karena repositori PyPI berada pada periode brownout dari penghentian TLS awal.

Sumber - Waktu Untuk Meng-upgrade Python Anda: TLS v1.2 Akan Segera Wajib

Anda dapat memutakhirkan versi TLS menggunakan perintah berikut:

sudo apt-get update && sudo apt-get install openssl libssl-dev

Ini akan memperbaiki masalah Anda. Semoga berhasil!

EDIT: Anda dapat mengunduh paket menggunakan repositori paket python pribadi Anda terlepas dari versi TLS. Repositori Paket Python Pribadi

Vithulan
sumber
2

Ini berhasil untuk saya. Tambahkan sudo sebelum python

curl https://bootstrap.pypa.io/get-pip.py |sudo python
Sugoi Reed
sumber
2

Untuk Pengguna Python2 WIN10:

1.Uninstall python secara menyeluruh, sertakan semua folder.

2. Ambil dan instal python-2.7.msi terbaru (ver 2.7.15)

3.Setelah langkah 2, Anda mungkin menemukan pip telah diinstal juga.

4. Sekarang, jika system'env Anda belum diubah, Anda dapat menggunakan pip untuk menginstal paket sekarang. "Versi protokol peringatan tlsv1" tidak akan muncul.

Optimus prime
sumber
2

Saya mencoba semua perbaikan yang ada dan tidak bekerja untuk saya

Saya menginstal ulang python 2.7 (juga akan menginstal pip) dengan mengunduh .pkg di https://www.python.org/downloads/mac-osx/

berfungsi untuk saya setelah instalasi pkg diunduh

Inti
sumber
2

Saya mengalami masalah ini juga. Masalah yang mendasarinya adalah bahwa ssl library di Python 2.7 versi <2.7.9 tidak lagi kompatibel dengan mekanisme pip.

Jika Anda menjalankan pada Windows, dan Anda (seperti kami) tidak dapat dengan mudah memutakhirkan dari versi 2.7, FWIW yang tidak kompatibel, saya menemukan bahwa jika Anda menyalin file-file berikut dari instalasi lain dari versi terbaru Python (mis. Python 2.7. 15) pada komputer lain ke instalasi Anda:

    Lib\ssl.py
    libs\_ssl.lib
    DLLs\_ssl.dll

itu akan secara efektif "meningkatkan" lapisan SSL Anda ke yang didukung; kami kemudian dapat menggunakan pip lagi, bahkan untuk memutakhirkan pip.

W. Sadkin
sumber
2

Jawaban menginstal pip melalui:

  1. curl https://bootstrap.pypa.io/get-pip.py |sudo python atau
  2. curl https://bootstrap.pypa.io/get-pip.py | python

tidak bekerja untuk saya karena saya terus mendapatkan kesalahan:

Could not fetch URL https://pypi.org/simple/pip/: There was a problem confirming the ssl certificate: HTTPSConnectionPool(host='pypi.org', port=443): Max retries exceeded with url: /simple/pip/ (Caused by SSLError("Can't connect to HTTPS URL because the SSL module is not available.",)) - skipping
ERROR: Could not find a version that satisfies the requirement pip (from versions: none)
ERROR: No matching distribution found for pip

Saya harus menginstal pipsecara manual melalui:

  1. Kunjungi situs webpip distribusi
  2. Unduh tar.gzversinya
  3. Buka paket file secara lokal dan cdke direktori
  4. Lari python setup.py install
pokkie
sumber
1

Ini bekerja untuk saya, saya menginstal versi terbaru dari pip dan kemudian menginstal library ( ciscoconfparse ).

Memutakhirkan pip:

curl https://bootstrap.pypa.io/get-pip.py | sudo /Users/{your user name}/{path to python}/bin/python
pengguna9825640
sumber
1

myenv:

python 2.7.14

pip 9.0.1

mac osx 10.9.4


mysolution:

  1. unduh get-pip.pysecara manual dari https://packaging.python.org/tutorials/installing-packages/

  2. Lari python get-pip.py


referensi:

https://github.com/pypa/warehouse/issues/3293#issuecomment-378468534

https://packaging.python.org/tutorials/installing-packages/

Unduh get-pip.py dengan aman [1]

Jalankan python get-pip.py. [2] Ini akan menginstal atau meningkatkan pip. Selain itu, ia akan menginstal setuptools dan roda jika mereka belum diinstal.

Pastikan pip, setuptools, dan roda sudah terbaru

Sementara pip saja sudah cukup untuk menginstal dari arsip biner yang dibuat sebelumnya, salinan terbaru dari setuptools dan proyek roda berguna untuk memastikan Anda juga dapat menginstal dari arsip sumber:

python -m pip install --upgrade pip setuptools wheel

Nick Dong
sumber
1

Saya juga menemukan masalah ini di windows10 saya dan mencoba semua jawaban tetapi tidak menyelesaikan masalah saya.

C: \ python367 \ Scripts> pip instal Flask

Mengumpulkan Flask Tidak dapat menemukan versi yang memenuhi persyaratan Flask (dari versi:) Tidak ditemukan distribusi yang cocok untuk Flask

Setelah itu, saya menemukan file konfigurasi pip telah dimodifikasi. Jadi, saya menetapkan pip.inisebagai konfigurasi default asli, jalankan kembali perintah pip dan berfungsi untuk saya!

Singkatnya solusi saya:

  1. Periksa pip.ini (biasanya di bawah jalan C:\ProgramData\pip) telah dimodifikasi;

  2. Jika ya pada langkah 1, cobalah untuk mengatur ulang ke konfigurasi default.

lyn
sumber
1

Atau hanya perpustakaan yang diperlukan saja tidak ada dalam repo. Saya pemula Python dan semua saran tentang memutakhirkan pip akhirnya ditampilkan sebagai menyesatkan. Saya baru saja melihat ke https://pypi.org/ , menemukan perpustakaan (aliran udara dalam kasus saya) berhenti di beberapa versi lama, setelah itu berganti nama. Ya, juga solusi konyol itu juga mungkin :-).

Tomáš Záluský
sumber
1

Untuk semua python3dan pip3pengguna di luar sana:

curl https://bootstrap.pypa.io/get-pip.py | sudo python3

dan kemudian asumsikan Anda ingin menginstal panda

pip3 install pandas --user
HoKy22
sumber