Không thể cài đặt các gói Python [SSL: TLSV1_ALERT_PROTOCOL_VERSION]


167

Tôi đang cố gắng cài đặt thư viện Python bằng cách sử dụng pip, gặp lỗi 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

phiên bản pip: pip 9.0.1

Làm cách nào để khắc phục lỗi này?


1
Thực hiện theo câu trả lời này stackoverflow.com/a/46808948/2419644
Mitul Shah

Bản sao có thể có của Không thể cài đặt thư viện python
phd

Câu trả lời:


443

Nâng cấp pip như sau:

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

Lưu ý: Bạn có thể cần sử dụng sudo pythonở trên nếu không ở trong môi trường ảo.

(Lưu ý rằng việc nâng cấp pipbằng cách sử dụng piptức là pip install --upgrade pipcũng sẽ không nâng cấp chính xác. Đây chỉ là sự cố trứng gà. pipSẽ không hoạt động trừ khi sử dụng TLS> = 1.2.)

Như đã đề cập trong câu trả lời chi tiết này , điều này là do sự phản đối của TLS gần đây đối với pip. Các trang web Python.org đã ngừng hỗ trợ cho các phiên bản TLS 1.0 và 1.1.

Từ trang trạng thái Python:

Đã hoàn thành - Các màn hình cuộn đã kết thúc và TLSv1.0 và TLSv1.1 đã bị vô hiệu hóa. Ngày 11 tháng 4, 15:37 UTC


Đối với người dùng PyCharm (virtualenv):

  1. Chạy môi trường ảo với shell. (thay thế "./venv/bin/activate" vào đường dẫn của riêng bạn)

    source ./venv/bin/activate
  2. Chạy nâng cấp

    curl https://bootstrap.pypa.io/get-pip.py | python
  3. Khởi động lại phiên bản PyCharm của bạn và kiểm tra trình thông dịch Python của bạn trong Tùy chọn .


2
Điều này làm việc cho tôi! Tôi đã phải thêm sudoở phía trước vì sự cho phép từ chối lỗi. Cảm ơn!
Simar

34
Yêu cầu sudo hoạt động: curl https://bootstrap.pypa.io/get-pip.py | sudo python
Wallace

2
@Simar @Wallace yeah, có thể yêu cầu sudonếu không ở trong môi trường ảo. Đã thêm bit đó vào câu trả lời ngay bây giờ.
Anupam

1
Nếu bạn không ở trong môi trường ảo, bạn có thể cần chỉ định đường dẫn đến tệp nhị phân python của mình, như Ilya đề cập bên dưới
Chris

2
Trên OSX, điều này làm việc tốt hơn với tôicurl https://bootstrap.pypa.io/get-pip.py | sudo -H python3
nick fox

26

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 ý, curlpipwgettấ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 python3pip3ở 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


4
Tôi cũng nhận ra rằng tôi phải chạy pip3, không chỉ pip- kiểm tra phiên bản bằng lệnh -Vđể đảm bảo bạn đang chạy đúng pip !!
Ngày

9

Theo câu trả lời của @ Anupam trên OS X đã gây ra lỗi sau cho tôi, bất kể tôi đã chạy nó với quyền gì:

Không thể cài đặt các gói do Môi trườngError: [Errno 13] Quyền bị từ chối: ...

Điều cuối cùng có hiệu quả là tải xuống gói pip mới hơn (9.0.3) từ PyPI trực tiếp từ trình duyệt của tôi - https://pypi.org/simple/pip/ , trích xuất nội dung và sau đó pip cài đặt gói cục bộ:

pip install ./pip-9.0.3/

Điều này đã sửa [SSL: TLSV1_ALERT_PROTOCOL_VERSION]lỗi của tôi .


7

Giải pháp của @Anupam làm việc cho tôi. Tuy nhiên, tôi đã phải sử dụng sudovà chỉ định vị trí chính xác của môi trường Python ảo của mình:

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

6

Để nâng cấp phiên bản cục bộ, tôi đã sử dụng một biến thể nhỏ:

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

Vấn đề này phát sinh nếu bạn giữ pip và gói trong thư mục nhà của bạn như được mô tả trong ý chính này .


5

Các giải pháp sau đây làm việc cho tôi:

brew install python2

Nó cũng được nâng cấp piplên phiên bản 1.10.1


^ cái này cho những người trong chúng ta không sử dụng python mặc định trên OSX. Tôi đoán câu hỏi không phải là OSX cụ thể, nhưng dù sao, nếu bạn không chạy Linux, thì câu hỏi này hoạt động --- trừ khi bạn viết nội dung trên hệ thống đã cài đặt Python.
bình

Cái này làm việc cho tôi, tôi sử dụng python trên OSX. Tình hình của tôi tôi đã dành một tuần để cố gắng cài đặt bất kỳ gói pip nào và nó đã thất bại. Tôi đã gỡ cài đặt pip và từ lúc này tôi không thể làm gì cho đến khi nhận được lệnh này đã cài đặt pip cho tôi. Cảm ơn bạn!
đạn

3

Kiểm tra phiên bản TLS của bạn:

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

Nếu phiên bản TLS của bạn nhỏ hơn 1,2, bạn phải nâng cấp nó vì kho lưu trữ PyPI đang trong thời gian mất dần của TLS sớm.

Nguồn - Thời gian để nâng cấp Python của bạn: TLS v1.2 sẽ sớm bị bắt buộc

Bạn có thể nâng cấp phiên bản TLS bằng lệnh sau:

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

Điều này sẽ khắc phục vấn đề của bạn. Chúc may mắn!

EDIT: Bạn có thể tải xuống các gói bằng cách sử dụng kho lưu trữ gói python riêng của mình bất kể phiên bản TLS. Kho lưu trữ gói Python riêng


2

Điều này làm việc cho tôi. Thêm sudo trước python

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

2

Đối với người dùng Python2 WIN10:

1. Uninstall python triệt để, bao gồm tất cả các thư mục.

2. Tìm nạp và cài đặt python mới nhất-2.7.msi (ver 2.7.15)

3.Sau bước 2, bạn cũng có thể thấy pip đã được cài đặt.

4.Bây giờ, nếu hệ thống của bạn chưa được thay đổi, bạn có thể sử dụng pip để cài đặt các gói ngay bây giờ. "Phiên bản giao thức cảnh báo tlsv1" sẽ không xuất hiện.



2

Tôi cũng gặp vấn đề này. Vấn đề cơ bản là thư viện ssl trong phiên bản Python 2.7 <2.7.9 không còn tương thích với cơ chế pip.

Nếu bạn đang chạy trên Windows và bạn (như chúng tôi) không thể dễ dàng nâng cấp từ phiên bản 2.7 không tương thích, FWIW, tôi thấy rằng nếu bạn sao chép các tệp sau từ bản cài đặt khác của phiên bản Python mới nhất (ví dụ Python 2.7. 15) trên máy khác để cài đặt của bạn:

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

nó sẽ "nâng cấp" lớp SSL của bạn lên một cách hiệu quả; sau đó chúng tôi đã có thể sử dụng pip một lần nữa, thậm chí để nâng cấp pip.


1

Điều này làm việc cho tôi, tôi đã cài đặt phiên bản mới nhất của pip và sau đó cài đặt thư viện ( ciscoconfparse ).

Nâng cấp pip:

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

1

myenv:

trăn 2.7,14

đường ống 9.0.1

mac osx 10.9.4


giải pháp của tôi:

  1. tải xuống get-pip.pythủ công từ https://packaging.python.org/tutorials/installing-packages/

  2. chạy python get-pip.py


giới thiệu:

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

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

Tải xuống an toàn get-pip.py [1]

Chạy python get-pip.py. [2] Điều này sẽ cài đặt hoặc nâng cấp pip. Ngoài ra, nó sẽ cài đặt setuptools và bánh xe nếu chúng chưa được cài đặt.

Đảm bảo pip, setuptools và bánh xe được cập nhật

Mặc dù chỉ riêng pip là đủ để cài đặt từ kho lưu trữ nhị phân dựng sẵn, các bản sao cập nhật của các công cụ thiết lập và dự án bánh xe rất hữu ích để đảm bảo bạn cũng có thể cài đặt từ kho lưu trữ nguồn:

python -m pip install --upgrade pip setuptools wheel


1

Tôi cũng gặp vấn đề này trên windows10 và đã thử tất cả các câu trả lời nhưng không giải quyết được vấn đề của mình.

C: \ python367 \ ScScript> pip cài đặt Flask

Thu thập Flask Không thể tìm thấy phiên bản thỏa mãn Flask yêu cầu (từ các phiên bản :) Không tìm thấy phân phối phù hợp cho Flask

Sau đó, tôi thấy tập tin cấu hình pip đã được sửa đổi. Vì vậy, tôi đặt pip.inicấu hình mặc định ban đầu, chạy lại lệnh pip và nó hoạt động với tôi!

Tóm lại giải pháp của tôi:

  1. Kiểm tra pip.ini (thường theo đường dẫn C:\ProgramData\pip) đã được sửa đổi;

  2. Nếu có trong bước 1, hãy thử đặt lại cấu hình mặc định.


1

Hoặc đơn giản là thư viện cần thiết không có trong repo. Tôi là newbie Python và tất cả các lời khuyên về việc nâng cấp pip cuối cùng được hiển thị là sai lệch. Tôi chỉ cần xem qua https://pypi.org/ , việc tìm kiếm thư viện (luồng không khí trong trường hợp của tôi) dừng lại ở một số phiên bản cũ, sau đó nó được đổi tên. Vâng, cũng là giải pháp ngớ ngẩn cũng có thể :-).


1

Đối với tất cả python3pip3người dùng ngoài kia:

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

và sau đó giả sử bạn muốn cài đặt gấu trúc

pip3 install pandas --user

1

Các câu trả lời của việc cài đặt pip thông qua:

  1. curl https://bootstrap.pypa.io/get-pip.py |sudo python hoặc là
  2. curl https://bootstrap.pypa.io/get-pip.py | python

đã không làm việc cho tôi khi tôi tiếp tục nhận được lỗi:

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

Tôi đã phải cài đặt pipthủ công qua:

  1. Truy cập trang webpip phân phối
  2. Tải xuống tar.gzphiên bản
  3. Giải nén tệp cục bộ và cdvào thư mục
  4. chạy python setup.py install
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.