แต่ถ้าcurl
คำสั่งนั้นล้มเหลวด้วยข้อผิดพลาดหรือ"tlsv1 alert protocol version"ยังคงมีอยู่แม้หลังจากอัพเกรดpip
หมายความว่าไลบรารี่ OpenSSL ไลบรารี่เวอร์ชัน < 1.0.1
หรือ Python เวอร์ชัน <2.7.9
(หรือ < 3.4
ใน Python 3) ไม่สนับสนุนโปรโตคอล TLS 1.2 รุ่นใหม่ ที่pip
ตอบสนองความต้องการที่จะเชื่อมต่อกับ PyPI ตั้งแต่ประมาณปีที่ผ่านมา คุณสามารถตรวจสอบได้อย่างง่ายดายใน Python interpreter:
>>> 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'
AttributeError
(แทนคาดว่า '5') หมายถึงงูหลาม STDLIB ของคุณssl
สนับสนุนโมดูลรวบรวมกับ lib OpenSSL เก่าขาดโปรโตคอล TLSv1.2 นี้ (แม้ว่าห้องสมุด OpenSSL สามารถหรือจะได้รับการปรับปรุงในภายหลัง)
โชคดีที่มันสามารถแก้ไขได้ โดยไม่ต้องอัพเกรดหลาม (และทั้งระบบ) โดยการติดตั้งแพคเกจหลามพิเศษด้วยตนเอง - คู่มือขั้นตอนโดยขั้นตอนรายละเอียดเป็นอยู่ที่นี่ใน StackOverflow
หมายเหตุcurl
และpip
และwget
ทั้งหมดขึ้นอยู่กับ OpenSSL lib เดียวกันสำหรับการสร้างการเชื่อมต่อ SSL (ใช้$ openssl version
คำสั่ง) libcurl รองรับ TLS 1.2 ตั้งแต่ curl เวอร์ชั่น7.34แต่ควรเป็นเวอร์ชั่นที่เก่ากว่าสามารถเชื่อมต่อได้หากคุณมี OpenSSL เวอร์ชั่น 1.0.2 (หรือใหม่กว่า)
PS
สำหรับPython 3โปรดใช้python3
และpip3
ทุกที่ (ยกเว้นคุณอยู่ใน venv / virtualenv) รวมถึงcurl
คำสั่งจากด้านบน :
$ curl https://bootstrap.pypa.io/get-pip.py | python3 --user