โมดูล SSL ใน Python ไม่พร้อมใช้งาน (บน OSX)


21

ฉันมีปัญหาpip installในการใช้งานvirtualenv บน OSX 10.13 ฉันได้ทำงานbrew install opensslและเส้นทางจุดที่จะต้อง/usr/local/include/openssl ../opt/openssl/include/opensslไม่มีใครรู้วิธีการที่จะแก้ไขปัญหานี้? นี้เริ่มเกิดขึ้นหลังจากที่ผมติดตั้งใหม่โดยใช้pythonbrew install

pip ถูกกำหนดค่าด้วยตำแหน่งที่ต้องการ TLS / SSL อย่างไรก็ตามโมดูล ssl ใน Python ไม่สามารถใช้ได้ การรวบรวมหมอนไม่สามารถดึง URL https://pypi.python.org/simple/pillow/ : มีปัญหาในการยืนยันใบรับรอง SSL: ไม่สามารถเชื่อมต่อกับ HTTPS URL ได้เนื่องจากโมดูล SSL ไม่พร้อมใช้งาน - ข้ามไม่พบรุ่นที่ตรงตามข้อกำหนดหมอน (จากรุ่น:) ไม่พบการกระจายที่ตรงกันสำหรับหมอน

UPDATE: นี่คือข้อมูลเพิ่มเติม:

 which python
/usr/local/opt/python/libexec/bin/python
 which pip
/usr/local/opt/python/libexec/bin/pip
 python --version
Python 3.7.4
 pip --version
pip 19.1.1 from /usr/local/lib/python3.7/site-packages/pip (python 3.7)
 brew info python
python: stable 3.7.4 (bottled), HEAD
Interpreted, interactive, object-oriented programming language
https://www.python.org/
/usr/local/Cellar/python/3.6.5_1 (4,795 files, 100.0MB)
  Poured from bottle on 2019-10-08 at 14:39:37
/usr/local/Cellar/python/3.7.4_1 (3,903 files, 60.6MB) *
  Poured from bottle on 2019-10-08 at 14:37:10
From: https://github.com/Homebrew/homebrew-core/blob/master/Formula/python.rb

ใช่ฉันมีทั้ง 3.6.5_1 และ 3.7.4_1 ติดตั้งเนื่องจากฉันอาจต้องสลับระหว่างสองครั้ง

 brew unlink openssl
Unlinking /usr/local/Cellar/openssl/1.0.2s... 0 symlinks removed

เริ่มต้นด้วยการแสดงการส่งออกของwhich python, which pip, ,python --version pip --versionจากนั้นครั้งสุดท้ายที่ผมตรวจสอบopensslเป็นถังเท่านั้นดังนั้นไม่ควรจะนำเสนอการทำงาน/usr/local/include/openssl brew unlink openssl
ivan_pozdeev

@ivan_pozdeev แน่นอนฉันได้เพิ่มผลลัพธ์แล้ว brew unlinkผมได้พยายามแล้ว
John M.

คำตอบ:


53

sslโมดูลเช่นเดียวกับต้นแบบขยาย C ปรากฏขึ้นที่จะเป็นส่วนหนึ่งของpythonสูตร

Mac-Admin:~ admin$ python3
Python 3.7.4 (default, Sep  7 2019, 18:27:02) 
[Clang 10.0.1 (clang-1001.0.46.4)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import ssl
>>> ssl
<module 'ssl' from '/usr/local/Cellar/python/3.7.4_1/Frameworks/Python.framework/Versions/3.7/lib/python3.7/ssl.py'>
>>> import _ssl
>>> _ssl
<module '_ssl' from '/usr/local/Cellar/python/3.7.4_1/Frameworks/Python.framework/Versions/3.7/lib/python3.7/lib-dynload/_ssl.cpython-37m-darwin.so'>

ดังนั้นจึงหายไปส่วนใหญ่อาจหมายถึงความเสียหายการติดตั้งแพคเกจที่brew reinstall pythonควรแก้ไข


โปรดทราบว่าในขณะที่ Homebrew อนุญาตให้ใช้หลายรุ่นอยู่ร่วมกันได้ตรรกะการติดตั้งยังไม่ได้รับการออกแบบมาเพื่อให้รุ่นทางเลือกทำงานได้จนกว่าจะมีการติดตั้งผ่านสูตรเวอร์ชัน (และเช่นลบเวอร์ชันเก่าเป็นประจำในปกติbrew cleanup )

ดังนั้นให้พิจารณาใช้pyenv(มีให้ผ่านbrew) หากคุณต้องการสลับระหว่างเวอร์ชัน Python เป็นประจำหรือแตะที่บุคคลที่สามที่เสนอสูตรที่กำหนดเวอร์ชันไว้


8
ขอบคุณ! brew reinstallแก้ไขมันแน่นอน
John M.

11

Mac OSX Catalina (และปัญหาเดียวกันกับ OSX Mojave) Pyenv

สำหรับผู้ที่ค้นหาหัวข้อนี้ฉันมีปัญหาการนำเสนอเหมือนกัน แต่มีการติดตั้ง Python ผ่าน Homebrew และ Pyenv !! คงจะดีกว่า (IMO) เพียงแค่ใช้ Pyenv เพื่อจัดการเวอร์ชันต่างๆ ดังที่ @ivan_pozdeev พูดถึงในคำตอบของพวกเขา แต่นี่คือรายละเอียดบางอย่างที่คุณอาจต้องการ

หากสถานการณ์ของคุณคล้ายกันไม่มีวิธีการแก้ปัญหาข้างต้นจะเพียงพอที่จะกำหนดสิ่งที่เหมาะสม บางส่วนฉันได้รับความช่วยเหลือจากคำตอบที่เกี่ยวข้องกับ Pyenv ที่นี่: https://stackoverflow.com/a/51797298/3084820ฉันก็เกิดขึ้นpyenv-virtualenvติดตั้งดังนั้นจึงกล่าวถึงเช่นกันว่าเป็นเรื่องปกติที่จะใช้สองสิ่งนี้ร่วมกัน

ในที่สุดฉันก็ทำตามขั้นตอนต่อไปนี้เพื่อแก้ไขปัญหา:

brew uninstall python
rm -rf $(pyenv root)
brew uninstall pyenv-virtualenv   # you may not have this installed, but...
brew uninstall pyenv

ตอนนี้สำหรับการติดตั้งใหม่ทั้งหมดที่จัดการได้ด้วย Pyenv:

brew install pyenv
pyenv install 3.6.10  (or whatever version you want)

นี่ทำให้ฉันได้ติดตั้ง Python 3.6.10 ที่สะอาดและใช้งานได้และถ้าฉันต้องการหรือต้องการฉันก็สามารถติดตั้งเวอร์ชันอื่นและสลับไปมากับ Pyenv ได้


ฉันคิดว่าฉันอยู่ในสถานการณ์เดียวกัน ทีนี้มันจำเป็นbrew uninstall pythonไหมถ้าคุณแค่ใช้pyenv? หรือสิ่งนี้สร้างความขัดแย้งที่ไหนสักแห่ง? นอกจากนี้ฉันพยายามbrew uninstall pythonแล้วมันก็โยนฉันข้อผิดพลาด "ข้อผิดพลาด: ปฏิเสธที่จะถอนการติดตั้ง /usr/local/Cellar/python/3.7.7 เพราะมันเป็นสิ่งจำเป็นโดย [พวงของแพคเกจอื่น ๆ ]" มันอาจจะปลอดภัยที่จะไปข้างหน้าพร้อมกับข้อเสนอแนะของbrew uninstall --ignore-dependencies pythonแต่ฉันลังเลอย่างไรก็ตาม ฉันจำไม่ได้ว่าฉันใช้ไพ ธ อนรุ่นนี้อย่างไรและถ้าฉันยังใช้อยู่
แอนทอน

@ อันโต, ฉันเชื่อว่าฉันสามารถแก้ไขได้ใน pyenv โดยไม่ต้องติดตั้งหลามกับชง อย่างไรก็ตามฉันติดตั้งไพ ธ อนรุ่นใหม่ด้วย pyenv: pyenv uninstall 3.6.6 pyenv install 3.6.6 pyenv global 3.6.6
wronk

@ wronk ขอบคุณสำหรับข้อมูลของคุณ! ดูเหมือนว่า (แต่ฉันไม่แน่ใจทั้งหมด) ว่าปัญหาที่ฉันได้หายไปอย่างใดโดยการทำงานbrew uninstall python แม้ว่ามันจะโยนข้อผิดพลาดที่จะไม่ถอนการติดตั้งงูหลาม บางทีคำสั่งอาจทำความสะอาดเบื้องต้นก่อนตัดสินใจว่าจะไม่ดำเนินการถอนการติดตั้งของ python หรือไม่ หรืออาจมีอย่างอื่นที่ฉันทำ อย่างไรก็ตามฉันยังคงมีปัญหาที่แตกต่างกับงูหลามรุ่นอื่นและฉันคิดว่าฉันจะติดตั้งเวอร์ชันนั้นใหม่ตามที่คุณแนะนำ
แอนทอน

2

ฉันมีปัญหาคล้ายกันกับ Catalina และไม่สามารถติดตั้ง homebrew ให้ทำงานได้ ฉันลองหลายอย่าง

brew reinstall openssl
brew reinstall pyenv
brew reinstall pyenv-virtualenv

ในที่สุดสิ่งเดียวที่ทำงานได้สำหรับฉันคือการถอนการติดตั้งอย่างสมบูรณ์ทั้งการติดตั้งหลามพื้นฐานแล้วติดตั้งทุกอย่าง

brew uninstall pyenv pyenv-virtualenv
brew install pyenv pyenv-virtualenv
pyenv uninstall 3.x.x
pyenv install 3.x.x
pip install -r requirements.txt

ไม่brew uninstall pyenv pyenv-virtualenvได้ลบสภาพแวดล้อมเสมือนทั้งหมดตามข้อเสนอแนะของคุณpyenv uninstall 3.x.x?
แอนทอน

0

ฉันมีปัญหาเดียวกัน แต่การติดตั้งใหม่ไม่ทำงานสำหรับฉัน

⇒ python3 ใด
/ usr / local / bin / python3 blamb @ cha-109164-l: / usr / local / bin | master⚡

⇒ซึ่ง pip3 / usr / local / bin / pip3 blamb @ cha-109164-l: / usr / local / bin | master⚡

⇒ pip3 -V pip 19.3.1 จาก /usr/local/lib/python3.7/site-packages/pip (python 3.7) blamb @ cha-109164-l: / usr / local / bin | master⚡

⇒ python3 -V Python 3.7.0 blamb @ cha-109164-l: / usr / l


2
ยินดีต้อนรับสู่กองล้น! คุณอาจต้องการแก้ไขคำตอบเพื่อจัดรูปแบบรหัสของคุณ ตัวอย่างเช่น 4 ช่องว่างก่อนบรรทัดรหัสของคุณจะทำเครื่องหมายว่าเป็นรหัส คุณอาจต้องการอ่านความช่วยเหลือในการจัดรูปแบบเพื่อทำความเข้าใจวิธีการทำเครื่องหมายคำถามและคำตอบให้ถูกต้อง คุณจะมีโอกาสที่ดีขึ้นกับพวกเขาหากพวกเขามีรูปแบบที่ดี
rvbarreto

0

ฉันมีข้อผิดพลาดเดียวกันและเป็นเพราะฉันใช้ python 3.6.5 ในสภาพแวดล้อม pyenv ของฉัน การรักษาด้านล่างใช้ได้สำหรับฉัน

pyenv install 3.7.3
pyenv global 3.7.3


0

การแก้ไขของฉันคือการติดตั้ง pyenv และ python ใหม่

 brew uninstall pyenv pyenv-virtualenv
 brew install pyenv pyenv-virtualenv
 pyenv uninstall 3.6.5
 pyenv install 3.6.5
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.