Tetapi jika curl
perintah 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.1
atau versi Python < 2.7.9
(atau < 3.4
dengan Python 3) tidak mendukung protokol TLS 1.2 yang lebih baru yang pip
perlu 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 ssl
modul 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, curl
dan pip
dan wget
semua tergantung pada lib OpenSSL yang sama untuk membuat koneksi SSL (gunakan $ openssl version
perintah). 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 python3
dan di pip3
mana saja (kecuali Anda berada di venv / virtualenv), termasuk curl
perintah dari atas :
$ curl https://bootstrap.pypa.io/get-pip.py | python3 --user