【问题标题】:SSL module in Python is not available (on OSX)Python 中的 SSL 模块不可用(在 OSX 上)
【发布时间】:2020-02-05 09:27:56
【问题描述】:

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

pip 配置了需要 TLS/SSL 的位置,但是 ssl Python 中的模块不可用。收集枕头无法取出 网址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 当然,我已经添加了输出。我已经尝试过brew unlink

标签: python macos ssl


【解决方案1】:

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 版本之间进行常规切换,或者某些提供版本化公式的第 3 方点击,请考虑使用 pyenv(也可通过 brew 获得)。

【讨论】:

  • 谢谢! brew reinstall 确实修复了它。
【解决方案2】:

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

【讨论】:

  • 我想我也有同样的情况。现在,如果您只是使用pyenv,是否有必要brew uninstall python?或者这是否会在某处产生冲突?另外,我尝试了brew uninstall python,它向我抛出了错误消息“错误:拒绝卸载 /usr/local/Cellar/python/3.7.7,因为 [一堆其他软件包] 需要它”。继续brew uninstall --ignore-dependencies python 的建议可能是安全的,但我仍然犹豫不决。我不记得我是如何使用这个版本的 python 的,如果我还在使用它。
  • @Antoine,我相信我能够在 pyenv 中解决此问题,而无需使用 brew 重新安装 python。但是,我确实使用 pyenv 重新安装了特定的 python 版本:pyenv uninstall 3.6.6pyenv install 3.6.6pyenv global 3.6.6
  • @wronk 感谢您的意见!似乎(但我不完全确定)我通过运行brew uninstall python 以某种方式消失的问题即使它抛出了它不会卸载python的错误。在决定不继续卸载python之前,也许该命令还是做了一些初步清理?或者也许我做了其他事情。无论如何,我仍然对另一个版本的 python 有不同的问题,我想我会按照你的建议重新安装那个版本。
  • FWIW:我可以确认@wronk 提到的内容也对我有用,如前所述,重新安装 pyenv,而无需触摸使用 brew 安装的 python。
  • @matt-morgan 谢谢你的这篇文章。请确保您是否真的必须卸载 python 和所有这些人员。与@wronk 相同,我可以通过安装另一个版本的 python 来解决这个问题。例如,我在 python 3.7.4 上遇到了这个问题,所以我刚刚安装了 3.7.5
【解决方案3】:

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

对 OpenSSL 1.1.x 的支持仅在 Python 2.7.13、3.5.3 和 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

【讨论】:

  • 我有大约 20 个虚拟环境。将.pyenv/versions/x.x.x/envs 目录移动到一个临时位置,我能够卸载/重新安装python 版本来修复openssl,然后将环境移回并让它们再次正常工作
【解决方案4】:

我在使用 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 的建议删除所有虚拟环境吗?
  • @Antoine 不,它没有。但是,在这种情况下,您可能还需要手动删除它们。此外,使用 requirements.txt 文件非常非常有用,并且会在多种情况下为您节省很多时间,因为这些 Python 开发环境往往会不时中断。
【解决方案5】:

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

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

【讨论】:

    【解决方案6】:

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

    pyenv install 3.7.3
    pyenv global 3.7.3
    

    【讨论】:

      【解决方案7】:

      我也遇到了这个错误,我用brew update &amp;&amp; brew upgrade修复了它

      【讨论】:

        【解决方案8】:

        我有同样的错误。我尝试重新安装 OpenSSL。那没有帮助。我终于去了https://www.python.org/并下载了最新的官方/稳定安装程序并运行它。这解决了我的问题。

        这可能有点矫枉过正,但它解决了问题。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-05-02
          • 1970-01-01
          • 1970-01-01
          • 2022-07-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-10-26
          相关资源
          最近更新 更多