ไม่สามารถติดตั้งแพ็คเกจ Python [SSL: TLSV1_ALERT_PROTOCOL_VERSION]


167

ฉันกำลังพยายามติดตั้งไลบรารี Python โดยใช้pipรับข้อผิดพลาด 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

รุ่น pip: pip 9.0.1

ฉันจะแก้ไขข้อผิดพลาดนี้ได้อย่างไร


1
ทำตามคำตอบนี้ stackoverflow.com/a/46808948/2419644
Mitul Shah

ซ้ำซ้อนที่เป็นไปได้ของไม่สามารถติดตั้งไลบรารีหลาม
phd

คำตอบ:


443

อัพเกรด pip ดังนี้:

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

หมายเหตุ: คุณอาจต้องใช้sudo pythonข้างต้นหากไม่ได้อยู่ในสภาพแวดล้อมเสมือน

(โปรดทราบว่าการอัปเกรดpipโดยใช้pipie pip install --upgrade pipจะไม่สามารถอัพเกรดได้อย่างถูกต้องนี่เป็นเพียงปัญหาไก่และไข่pipจะไม่ทำงานเว้นแต่ใช้ TLS> = 1.2)

ดังที่กล่าวไว้ในคำตอบโดยละเอียดนี้เกิดจากการคัดค้าน TLS ล่าสุดสำหรับ pip ไซต์ Python.org หยุดการสนับสนุน TLS เวอร์ชัน 1.0 และ 1.1

จากหน้าสถานะ Python:

เสร็จสมบูรณ์ - ม้วนข้าวกล้องจะเสร็จสิ้นและ TLSv1.0 และ TLSv1.1 ถูกปิดใช้งาน 11 เม.ย. , 15:37 UTC


สำหรับผู้ใช้ PyCharm (virtualenv):

  1. เรียกใช้สภาพแวดล้อมเสมือนจริงด้วยเชลล์ (แทนที่ "./venv/bin/activate" เป็นพา ธ ของคุณเอง)

    source ./venv/bin/activate
  2. เรียกใช้การอัพเกรด

    curl https://bootstrap.pypa.io/get-pip.py | python
  3. รีสตาร์อินสแตนซ์ PyCharm คุณและตรวจสอบล่ามหลามของคุณในการตั้งค่า


2
สิ่งนี้ได้ผลสำหรับฉัน! ฉันต้องเพิ่มsudoที่ด้านหน้าเพราะได้รับอนุญาตปฏิเสธข้อผิดพลาด ขอบคุณ!
Simar

34
ต้องใช้ sudo เพื่อทำงาน: curl https://bootstrap.pypa.io/get-pip.py | sudo python
Wallace

2
@Simar @Wallace ใช่อาจต้องการsudoถ้าไม่ได้อยู่ในสภาพแวดล้อมเสมือน เพิ่มบิตนั้นในคำตอบทันที
Anupam

1
หากคุณไม่ได้อยู่ในสภาพแวดล้อมเสมือนคุณอาจต้องระบุเส้นทางไปยังไพ ธ อนของคุณตามที่ Ilya ระบุไว้ด้านล่าง
Chris

2
ใน OSX มันใช้งานได้ดีกว่าสำหรับฉันcurl https://bootstrap.pypa.io/get-pip.py | sudo -H python3
nick fox

26

แต่ถ้า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


4
ฉันก็รู้ว่าฉันต้องวิ่งpip3ไม่ใช่แค่pip- ตรวจสอบเวอร์ชั่นด้วยคำสั่ง-Vเพื่อให้แน่ใจว่าคุณกำลังใช้ pip ที่ถูกต้อง !!
ม.ค.

9

การปฏิบัติตามคำตอบของ @ Anupam ใน OS X ทำให้เกิดข้อผิดพลาดต่อไปนี้โดยไม่คำนึงถึงสิทธิ์ที่ฉันใช้ด้วย:

ไม่สามารถติดตั้งแพ็กเกจเนื่องจาก EnvironmentError: [Errno 13] การอนุญาตถูกปฏิเสธ: ...

สิ่งที่ใช้งานได้ในที่สุดก็คือการดาวน์โหลดแพ็คเกจ pip ที่ใหม่กว่า (9.0.3) จาก PyPI โดยตรงจากเบราว์เซอร์ของฉัน - https://pypi.org/simple/pip/ , แยกเนื้อหาแล้ว pip ติดตั้งแพ็คเกจในเครื่อง:

pip install ./pip-9.0.3/

สิ่งนี้แก้ไข[SSL: TLSV1_ALERT_PROTOCOL_VERSION]ข้อผิดพลาดของฉัน


7

วิธีแก้ปัญหาของ@Anupamเหมาะกับฉัน อย่างไรก็ตามฉันต้องใช้sudoและระบุตำแหน่งที่แน่นอนของสภาพแวดล้อม Python เสมือนของฉัน:

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

6

หากต้องการอัปเกรดรุ่นท้องถิ่นฉันใช้รุ่นที่ต่างกันเล็กน้อย:

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

ปัญหานี้เกิดขึ้นหากคุณเก็บ pip และแพ็คเกจไว้ในไดเรกทอรีหลักของคุณดังที่อธิบายไว้ในส่วนสำคัญนี้


5

วิธีแก้ปัญหาต่อไปนี้ใช้ได้กับฉัน:

brew install python2

นอกจากนี้ยังอัปเกรดpipเป็นเวอร์ชั่น 1.10.1


^ อันนี้สำหรับพวกเราที่ไม่ได้ใช้ python เริ่มต้นบน OSX ฉันเดาว่าคำถามนั้นไม่ได้เฉพาะเจาะจงกับ OSX แต่ถ้าคุณไม่ได้ใช้งาน Linux สิ่งนี้จะทำงาน --- เว้นแต่คุณจะเขียนเนื้อหาผ่านระบบที่ติดตั้ง Python
โถ

อันนี้ใช้ได้กับฉันฉันใช้ python บน OSX สถานการณ์ของฉันฉันใช้เวลาหนึ่งสัปดาห์ในการพยายามติดตั้งแพ็กเกจ pip และมันล้มเหลว ฉันถอนการติดตั้ง pip และจากเวลานี้ฉันไม่สามารถทำอะไรได้จนกว่าฉันจะได้รับคำสั่งซึ่งติดตั้ง pip สำหรับฉัน ขอบคุณ!
กระสุน

3

ตรวจสอบเวอร์ชั่น TLS ของคุณ:

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

หากเวอร์ชัน TLS ของคุณน้อยกว่า 1.2 คุณจะต้องอัปเกรดเนื่องจากพื้นที่เก็บข้อมูล PyPI นั้นอยู่ในช่วงระยะเวลาหมดเวลาของการปฏิเสธ TLS ก่อนหน้า

แหล่งที่มา - เวลาอัพเกรด Python ของคุณ: TLS v1.2 จะถูกบังคับใช้ในไม่ช้า

คุณสามารถอัพเกรดเวอร์ชั่น TLS ได้โดยใช้คำสั่งต่อไปนี้:

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

สิ่งนี้จะแก้ไขปัญหาของคุณ โชคดี!

แก้ไข: คุณสามารถดาวน์โหลดแพ็คเกจโดยใช้ที่เก็บแพคเกจหลามส่วนตัวของคุณเองโดยไม่คำนึงถึงรุ่น TLS ที่เก็บแพคเกจหลามส่วนตัว


2

สิ่งนี้ใช้ได้สำหรับฉัน เพิ่ม sudo ก่อนหลาม

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

2

สำหรับผู้ใช้ Python2 WIN10:

1. ถอนการติดตั้งหลามให้ละเอียดรวมถึงโฟลเดอร์ทั้งหมด

2. ดึงข้อมูลและติดตั้ง python-2.7.msi ล่าสุด (เวอร์ชั่น 2.7.15)

3. หลังจากขั้นตอนที่ 2 คุณอาจพบว่ามีการติดตั้ง pip ไว้ด้วย

4. ตอนนี้ถ้า system'env ของคุณไม่ได้เปลี่ยนคุณสามารถใช้ pip เพื่อติดตั้งแพ็คเกจได้เลย "tlsv1 alert protocol version" จะไม่ปรากฏขึ้น


2

ฉันพยายามแก้ไขที่มีอยู่ทั้งหมดและไม่ทำงานสำหรับฉัน

ฉันติดตั้ง python 2.7 อีกครั้ง (จะติดตั้ง pip) ด้วยการดาวน์โหลด. pkg ที่https://www.python.org/downloads/mac-osx/

ทำงานได้ดีสำหรับฉันหลังจากการติดตั้งดาวน์โหลด pkg


2

ฉันพบปัญหานี้เช่นกัน ปัญหาพื้นฐานคือไลบรารี ssl ใน Python 2.7 เวอร์ชัน <2.7.9 ไม่สามารถทำงานร่วมกับกลไก pip ได้อีกต่อไป

หากคุณกำลังใช้งาน Windows และคุณ (เช่นเรา) ไม่สามารถอัพเกรดได้อย่างง่ายดายจากรุ่น 2.7, FWIW ที่เข้ากันไม่ได้ฉันพบว่าหากคุณคัดลอกไฟล์ต่อไปนี้จากการติดตั้ง Python เวอร์ชันล่าสุดอีกครั้ง (เช่น Python 2.7 15) บนเครื่องอื่นเพื่อการติดตั้งของคุณ:

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

มันจะ "อัพเกรด" เลเยอร์ SSL ของคุณเป็นอย่างมีประสิทธิภาพซึ่งได้รับการสนับสนุน จากนั้นเราก็สามารถใช้ pip ได้อีกแม้กระทั่งอัพเกรด pip


1

สิ่งนี้ใช้ได้กับฉันฉันติดตั้ง pip รุ่นล่าสุดแล้วติดตั้งไลบรารี ( ciscoconfparse )

การอัพเกรด pip:

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

1

myenv:

หลาม 2.7.14

pip 9.0.1

mac osx 10.9.4


mysolution:

  1. ดาวน์โหลดget-pip.pyด้วยตนเองจากhttps://packaging.python.org/tutorials/installing-packages/

  2. วิ่ง python get-pip.py


refs:

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

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

ดาวน์โหลด get-pip.py อย่างปลอดภัย [1]

เรียกใช้ python get-pip.py [2] สิ่งนี้จะติดตั้งหรืออัพเกรด pip นอกจากนี้มันจะติดตั้ง setuptools และวงล้อหากยังไม่ได้ติดตั้ง

ตรวจสอบให้แน่ใจว่า pip, setuptools และ wheel เป็นรุ่นล่าสุด

ในขณะที่ pip เพียงอย่างเดียวก็เพียงพอที่จะติดตั้งจากคลังเก็บแบบไบนารีที่สร้างไว้ล่วงหน้าชุดสำเนาล่าสุดของ setuptools และโครงการล้อมีประโยชน์เพื่อให้แน่ใจว่าคุณสามารถติดตั้งจากคลังเก็บถาวรต้นฉบับได้:

python -m pip install --upgrade pip setuptools wheel


1

ฉันยังพบปัญหานี้ใน windows10 ของฉันและลองคำตอบทั้งหมด แต่ไม่ได้แก้ปัญหาของฉัน

C: \ python367 \ Scripts> pip ติดตั้ง Flask

การรวบรวม Flask ไม่พบรุ่นที่ตรงตามข้อกำหนด Flask (จากรุ่น:) ไม่พบการแจกแจงที่ตรงกันสำหรับ Flask

หลังจากนั้นฉันพบว่าไฟล์การกำหนดค่า pip ถูกแก้ไข ดังนั้นฉันจึงตั้งค่าpip.iniเป็นค่าเริ่มต้นดั้งเดิมรันคำสั่ง pip อีกครั้งและใช้งานได้สำหรับฉัน!

โดยสรุปการแก้ปัญหาของฉัน:

  1. ตรวจสอบ pip.ini (ปกติภายใต้เส้นทางC:\ProgramData\pip) ได้รับการแก้ไข;

  2. หากใช่ในขั้นตอนที่ 1 ลองรีเซ็ตเป็นค่าเริ่มต้น


1

หรือเพียงแค่ห้องสมุดที่ต้องการไม่ได้อยู่ใน repo ฉันเป็น Python มือใหม่และคำแนะนำทั้งหมดเกี่ยวกับการอัปเกรด pip ในที่สุดก็แสดงว่าทำให้เข้าใจผิด ฉันแค่มองเข้าไปที่https://pypi.org/การค้นหาไลบรารี่ (การไหลเวียนของอากาศในเคสของฉัน) หยุดที่เวอร์ชันเก่าแล้วเปลี่ยนชื่อใหม่ ใช่แล้วโซลูชันที่โง่ก็เป็นไปได้เช่นกัน :-)


1

สำหรับผู้ใช้python3และpip3ผู้ใช้ทั้งหมด:

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

จากนั้นสมมติว่าคุณต้องการติดตั้งแพนด้า

pip3 install pandas --user

1

คำตอบของการติดตั้ง pip ผ่าน:

  1. curl https://bootstrap.pypa.io/get-pip.py |sudo python หรือ
  2. curl https://bootstrap.pypa.io/get-pip.py | python

ไม่ทำงานสำหรับฉันเนื่องจากฉันได้รับข้อผิดพลาด:

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

ฉันต้องติดตั้งpipด้วยตนเองผ่าน:

  1. ไปที่เว็บไซต์การpipแจกจ่าย
  2. ดาวน์โหลด tar.gzเวอร์ชั่น
  3. คลายไฟล์ภายในเครื่องและ cdลงในไดเร็กทอรี
  4. วิ่ง python setup.py install
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.