Nhưng nếu curl
bản thân lệnh bị lỗi hoặc "phiên bản giao thức cảnh báo tlsv1" vẫn tồn tại ngay cả sau khi nâng cấp pip
, điều đó có nghĩa là phiên bản thư viện OpenSSL nằm dưới hệ điều hành của bạn < 1.0.1
hoặc phiên bản Python < 2.7.9
(hoặc < 3.4
trong Python 3) không hỗ trợ giao thức TLS 1.2 mới hơn mà pip
nhu cầu để kết nối với PyPI từ khoảng một năm trước . Bạn có thể dễ dàng kiểm tra nó trong trình thông dịch 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'
Các AttributeError
(thay vì dự kiến '5') có nghĩa là Python của bạn stdlib ssl
mô-đun, biên dịch chống lại lib openssl cũ, thiếu hỗ trợ cho các giao thức TLSv1.2 (ngay cả khi thư viện openssl có thể hoặc có thể được cập nhật sau).
May mắn thay, nó có thể được giải quyết mà không cần nâng cấp Python (và toàn bộ hệ thống), bằng cách cài đặt thủ công các gói Python bổ sung - hướng dẫn từng bước chi tiết có sẵn ở đây trên Stackoverflow .
Lưu ý, curl
và pip
và wget
tất cả phụ thuộc vào lib OpenSSL tương tự cho việc thiết lập kết nối SSL (sử dụng $ openssl version
lệnh). libcurl hỗ trợ TLS 1.2 kể từ phiên bản curl 7.34 , nhưng các phiên bản curl cũ hơn sẽ có thể kết nối nếu bạn có phiên bản OpenSSL 1.0.2 (hoặc phiên bản mới hơn).
PS
Đối với Python 3 , vui lòng sử dụng python3
và pip3
ở mọi nơi (trừ khi bạn đang ở trong venv / virtualenv), bao gồm curl
lệnh từ phía trên :
$ curl https://bootstrap.pypa.io/get-pip.py | python3 --user