Nhưng nếu curlbả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.1hoặc phiên bản Python < 2.7.9(hoặc < 3.4trong Python 3) không hỗ trợ giao thức TLS 1.2 mới hơn mà pipnhu 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 sslmô-đ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 ý, curlvà pipvà wgettấ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 versionlệ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 python3và pip3ở mọi nơi (trừ khi bạn đang ở trong venv / virtualenv), bao gồm curllệnh từ phía trên :
$ curl https://bootstrap.pypa.io/get-pip.py | python3 --user