Python中的SSL模块不可用(在OSX上)


21

pip install在OSX 10.13上的virtualenv中运行时遇到问题。我已经跑步brew install openssl了,路径/usr/local/include/openssl指向../opt/openssl/include/openssl。有谁知道如何解决这一问题?在我python使用重新安装后,这种情况开始发生brew install

pip配置了需要TLS / SSL的位置,但是Python中的ssl模块不可用。收集枕头无法获取URL https://pypi.python.org/simple/pillow/:确认ssl证书时出现问题:无法连接到HTTPS URL,因为SSL模块不可用。-跳过找不到满足枕头要求的版本(来自版本:)找不到与枕头匹配的分布

更新:这是更多信息:

 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 pythonwhich pippython --versionpip --version。然后,我上次检查的openssl是桶装的,所以/usr/local/include/openssl不应该出现,运行brew unlink openssl
ivan_pozdeev,

@ivan_pozdeev当然,我已经添加了输出。我已经尝试过了brew unlink
John M.

Answers:


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)。

因此,如果您需要在Python版本之间进行常规切换,或考虑为其提供版本化公式的某些第三方水龙头,请考虑使用pyenv(也可以通过提供brew)。


8
谢谢!brew reinstall确实解决了。
John M.

11

Mac OSX Catalina(和OSX Mojave上的同一问题)Pyenv

对于搜索此主题的任何人,我都遇到同样的问题,但是通过Homebrew和Pyenv都安装了Python!仅使用Pyenv轻松管理版本会更好(IMO)。正如@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,但是我仍然很犹豫。我不记得我是如何使用这个版本的python的,如果我仍然以某种方式使用它。
Antoine

@Antoine,我相信我可以在pyenv中解决此问题,而无需使用brew重新安装python。但是,我确实用pyenv重新安装了特定的python版本: pyenv uninstall 3.6.6 pyenv install 3.6.6 pyenv global 3.6.6
奇怪

@wronk感谢您的输入!似乎(但我不是完全确定)我以某种方式通过运行brew uninstall python 消失的问题,即使它抛出了无法卸载python的错误。也许该命令在决定不再进行python卸载之前还是做了一些初步的清理工作?也许我还有其他事情要做。无论如何,我对另一个版本的python 仍然有不同的问题,我想我会按照您的建议重新安装该版本。
Antoine

2

我在Catalina遇到了类似的问题,无法重新安装自制软件。我尝试了几件事。

brew reinstall openssl
brew reinstall pyenv
brew reinstall pyenv-virtualenv

最终,对我而言唯一有效的方法是完全卸载底层Python安装程序,然后重新安装所有内容。

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⚡

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

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


2
欢迎堆栈溢出!您可能需要编辑答案以格式化代码。例如,您的代码行之前的4个空格会将其标记为代码。您可能需要阅读格式帮助,以更好地了解如何正确标记问题和答案。如果它们格式正确,您将有更好的机会。
rvbarreto

0

我有同样的错误,这是因为我在pyenv环境中使用python 3.6.5。以下治疗对我有用。

pyenv install 3.7.3
pyenv global 3.7.3

0

我也有这个错误,我用 brew update && brew upgrade


0

我的解决方法是重新安装pyenv和python

 brew uninstall pyenv pyenv-virtualenv
 brew install pyenv pyenv-virtualenv
 pyenv uninstall 3.6.5
 pyenv install 3.6.5
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.