Mô-đun SSL trong Python không khả dụng (trên OSX)


21

Tôi gặp sự cố khi chạy pip installtrong virtualenv trên OSX 10.13. Tôi đã chạy brew install opensslvà đường dẫn /usr/local/include/opensslđến ../opt/openssl/include/openssl. Có ai biết làm thế nào để sửa lỗi này? Điều này bắt đầu xảy ra sau khi tôi cài đặt lại pythonbằng cách sử dụng brew install.

pip được cấu hình với các vị trí yêu cầu TLS / SSL, tuy nhiên mô đun ssl trong Python không khả dụng. Thu thập gối Không thể tìm nạp URL https://pypi.python.org/simple/pfl/ : Đã xảy ra sự cố khi xác nhận chứng chỉ ssl: Không thể kết nối với URL HTTPS vì mô-đun SSL không khả dụng. - bỏ qua Không thể tìm thấy phiên bản thỏa mãn Yêu cầu Gối (từ các phiên bản :) Không tìm thấy phân phối phù hợp cho Gối

CẬP NHẬT: Dưới đây là một số thông tin:

 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

Có, tôi đã cài đặt cả 3.6.5_1 và 3.7.4_1 vì tôi có thể cần phải chuyển đổi giữa hai lần.

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

Bắt đầu với thể hiện đầu ra của which python, which pip, python --version, pip --version. Sau đó, lần trước tôi đã kiểm tra, chỉ openssllà keg, /usr/local/include/opensslnên không nên có mặt, chạy brew unlink openssl.
ivan_pozdeev

@ivan_pozdeev Chắc chắn, tôi đã thêm đầu ra. Tôi đã thử rồi brew unlink.
John M.

Câu trả lời:


53

Các sslmô-đun cũng như xuất hiện phần mở rộng C cơ bản của nó là một phần của pythoncông thức:

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'>

Vì vậy, nó bị thiếu có lẽ có nghĩa là tham nhũng cài đặt gói brew reinstall pythonnên sửa chữa.


Cũng lưu ý rằng mặc dù Homebrew cho phép nhiều phiên bản cùng tồn tại, nhưng logic cài đặt của nó không được thiết kế để duy trì hoạt động của các phiên bản thay thế trừ khi chúng được cài đặt thông qua một công thức được phiên bản (và ví dụ như thường xuyên loại bỏ các phiên bản cũ brew cleanup).

Vì vậy, hãy cân nhắc sử dụng pyenv(cũng có sẵn thông qua brew) nếu bạn cần thường xuyên chuyển đổi giữa các phiên bản Python - hoặc một số vòi của bên thứ 3 cung cấp các công thức được phiên bản cho nó.


8
Cảm ơn! brew reinstallsửa chữa nó thực sự.
John M.

11

Mac OSX Catalina (và vấn đề tương tự trên OSX Mojave) Pyenv

Đối với bất kỳ ai đang tìm kiếm chủ đề này, tôi có cùng một vấn đề trình bày, nhưng đã cài đặt Python thông qua cả Homebrew và Pyenv !! Sẽ tốt hơn (IMO) khi chỉ sử dụng Pyenv để dễ dàng quản lý các phiên bản. Như @ivan_pozdeev đã đề cập trong câu trả lời của họ, nhưng đây là một số chi tiết bạn có thể muốn.

Nếu tình huống của bạn tương tự, không có giải pháp nào ở trên đủ để đặt mọi thứ đúng. Một phần tôi đã được giúp đỡ bởi một câu trả lời liên quan đến Pyenv tại đây: https://stackoverflow.com/a/51797298/3084820 Tôi cũng đã pyenv-virtualenvcài đặt, vì vậy, cũng đề cập đến việc sử dụng hai thứ này cùng nhau.

Cuối cùng tôi đã thực hiện các bước sau để giải quyết vấn đề:

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

Bây giờ, để cài đặt sạch có thể quản lý với Pyenv:

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

Điều này đã cho tôi một bản cài đặt Python 3.6.10 sạch sẽ, hoạt động tốt và nếu tôi muốn hoặc cần, tôi có thể cài đặt một phiên bản khác và chuyển đổi giữa với Pyenv.


Tôi nghĩ rằng tôi đang ở trong tình trạng tương tự. Bây giờ, có cần thiết brew uninstall pythonnếu bạn chỉ sử dụng pyenv? Hay điều này tạo ra một cuộc xung đột ở đâu đó? Ngoài ra, tôi đã thử brew uninstall pythonvà nó đã ném cho tôi thông báo lỗi "Lỗi: Từ chối gỡ cài đặt /usr/local/Cellar/python/3.7.7 vì nó được yêu cầu bởi [một loạt các gói khác]". Có thể an toàn để tiếp tục với đề xuất của brew uninstall --ignore-dependencies python, nhưng tôi vẫn do dự. Tôi không thể nhớ tôi đã sử dụng phiên bản python này như thế nào và nếu bằng cách nào đó tôi vẫn đang sử dụng nó.
Antoine

@Antoine, tôi tin rằng tôi đã có thể sửa lỗi này trong pyenv mà không cần cài đặt lại python với brew. Tuy nhiên, tôi đã cài đặt lại một phiên bản python cụ thể với pyenv: pyenv uninstall 3.6.6 pyenv install 3.6.6 pyenv global 3.6.6
wronk

@wronk cảm ơn bạn đã đóng góp! Có vẻ như (nhưng tôi không hoàn toàn chắc chắn) rằng vấn đề mà tôi đã biến mất bằng cách nào đó bằng cách chạy brew uninstall python mặc dù nó đã gây ra lỗi rằng nó sẽ không gỡ cài đặt python. Có lẽ lệnh đã thực hiện một số thao tác làm sạch sơ bộ trước khi quyết định rằng nó sẽ không tiếp tục với việc gỡ cài đặt python? Hoặc có thể có một cái gì đó tôi đã làm. Dù sao đi nữa, tôi vẫn có một khác nhau vấn đề với một phiên bản khác của trăn, và tôi nghĩ rằng tôi sẽ cài đặt lại phiên bản đó như bạn đề nghị.
Antoine

2

Tôi gặp vấn đề tương tự với Catalina và không thể cài đặt lại homebrew để hoạt động. Tôi đã thử một vài thứ.

brew reinstall openssl
brew reinstall pyenv
brew reinstall pyenv-virtualenv

Cuối cùng, điều duy nhất làm việc cho tôi là gỡ cài đặt hoàn toàn cả hai cài đặt python bên dưới và sau đó cài đặt lại mọi thứ.

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

không brew uninstall pyenv pyenv-virtualenvKHÔNG loại bỏ tất cả các môi trường ảo như đề nghị của bạn pyenv uninstall 3.x.x?
Antoine

0

Tôi có cùng một vấn đề, nhưng cài đặt lại đã không làm việc cho tôi.

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

⇒ mà pip3 / usr / local / bin / pip3 blamb @ cha-109164-l: / usr / local / bin | master⚡

Pip3 -V pip 19.3.1 từ /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
Chào mừng bạn đến với ngăn xếp tràn! Bạn có thể muốn chỉnh sửa câu trả lời của mình để định dạng mã của bạn. Chẳng hạn, 4 khoảng trắng trước dòng mã của bạn sẽ đánh dấu nó là mã. Bạn có thể muốn đọc phần trợ giúp định dạng để hiểu rõ hơn cách đánh dấu đúng câu hỏi và câu trả lời của bạn. Bạn sẽ có cơ hội tốt hơn với họ nếu chúng được định dạng tốt.
rvbarreto

0

Tôi đã có cùng một lỗi và đó là vì tôi đã sử dụng python 3.6.5 trong môi trường pyenv của mình. Các điều trị dưới đây làm việc cho tôi.

pyenv install 3.7.3
pyenv global 3.7.3

0

Tôi cũng gặp lỗi này và tôi đã sửa nó bằng brew update && brew upgrade


0

Cách khắc phục của tôi là cài đặt lại pyenv và python

 brew uninstall pyenv pyenv-virtualenv
 brew install pyenv pyenv-virtualenv
 pyenv uninstall 3.6.5
 pyenv install 3.6.5
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.