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

时间:2019-10-08 05:09:10

标签: python macos ssl

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

  

pip配置了需要TLS / SSL的位置,但是ssl   Python中的模块不可用。收集枕头无法获取   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

7 个答案:

答案 0 :(得分:29)

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之间切换。

答案 1 :(得分:22)

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允许多个版本共存,但是its installation logic isn't quite designed to keep the alternative versions operational除非通过版本化的公式安装(例如,定期删除常规brew cleanup中的旧版本)。

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

答案 2 :(得分:5)

我在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

答案 3 :(得分:4)

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

 brew uninstall pyenv pyenv-virtualenv
 brew install pyenv pyenv-virtualenv
 pyenv uninstall 3.6.5
 pyenv install 3.6.5

答案 4 :(得分:4)

这个问题也可能是因为您的python发行版是使用错误版本的openssl编译的。

仅在2.7.13、3.5.3和Python中添加了对OpenSSL 1.1.x的支持。 3.6.0(请参阅https://github.com/pyenv/pyenv/issues/950#issuecomment-562366902

因此,如果您要安装旧版本的Python,则必须先使用brew卸载新版本的openssl,然后才能使用pyenv安装旧版本的Python

brew uninstall --ignore-dependencies openssl@1.1
pyenv uninstall 3.5.2  # deinstall old versions compiled with the wrong version of openssl
pyenv install 3.5.2

另一方面,如果要安装Python的较新版本,请确保已安装可用的最新版本的openssl,然后再使用pyenv安装它们:

brew upgrade openssl
pyenv uninstall 3.7.4 # deinstall old versions compiled with the wrong version of openssl
pyenv install 3.7.4

答案 5 :(得分:1)

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

pyenv install 3.7.3
pyenv global 3.7.3

答案 6 :(得分:0)

我也遇到了这个错误,并用brew update && brew upgrade

进行了修复。