由于SSLError("无法连接到HTTPS URL,因为SSL模块不可用。")引起的问题。

144

我是通过Pycharm在Windows上使用Python3中的requests模块,但是我收到了一个“SSL模块不可用”的错误。

我已经花费数小时来尝试找出可能导致这个问题的原因。我已重新安装Anaconda,但是我还是无法解决问题。当运行以下命令时:

def Earlybird(daycount):
    url = 'https://msft.com'
    response = requests.get(url)
    print(response)
Earlybird()

我收到了错误提示:
requests.exceptions.SSLError: HTTPSConnectionPool(host='msft.com', 
port=443): Max retries exceeded with url: / (Caused by SSLError("Can't 
connect to HTTPS URL because the SSL module is not available."))

我不知道这是什么原因导致的。由于Anaconda是最近安装的,我认为一切都应该是最新的,所以我不确定这是否指向了错误的SSL?


这里 jezdez 的指示 https://github.com/conda/conda/issues/11795 帮助我解决了这个问题。不得不进行干净的 miniconda 安装,其他方法都没有奏效。 - hrrrrrr5602
26个回答

160

不确定这个问题是否已经解决,但是我在Windows 10上使用Anaconda Python 3.7.3和Idle时遇到了类似的问题。通过添加以下内容来解决:

<path>\Anaconda3
<path>\Anaconda3\scripts
<path>\Anaconda3\Library\bin

添加到 PATH 变量中。


3
这对我有用!不是使用 "execstack ..." 命令,而是使用这个命令!在路径中加入 /anaconda3/library/bin 对我有帮助。 - ERJAN
4
不确定如何/在哪里添加这3个路径? - Alex Dana
1
我需要在哪里添加这些路径?我正在尝试从特定文件夹运行Python代码,使用python get-pip.py - Henry Navarro
在Windows 10服务器上使用Anaconda Python 3.8.3进行开发。只需更改本地的path环境变量即可。 - EliSquared
我通过在Windows搜索框中运行“编辑系统环境变量”来添加了这些路径。新的“Anaconda”提示符已经捕捉到了这些更改,但必须重新启动才能让“PyCharm”看到更新后的路径。 - undefined
显示剩余5条评论

89

我在使用Windows 10操作系统,最近安装了Anaconda的新版本,但在Python 3.7.4上出现了问题。在GitHub上看到了这篇文章,解决了我的问题:

(来源:https://github.com/conda/conda/issues/8273)

以下为引用内容:

"我的解决方法: 我复制了以下文件。

libcrypto-1_1-x64.*
libssl-1_1-x64.*

从 D:\Anaconda3\Library\bin 到 D:\Anaconda3\DLLs。

它运行得很好!


6
对我来说,一切都需要相同的版本。Windows 10 Miniconda 中有3.7.4版本。使用这个解决方案修复了问题。 - Kevin Vasko

24

Windows用户需要设置以下路径:

  • ..\Anaconda3
  • ..\Anaconda3\scripts
  • ..\Anaconda3\Library\bin

每个用户:

  1. 打开环境变量
  2. 点击 用户变量
  3. 如果已经打开命令提示符,请关闭并重新打开

系统范围内(需要重新启动)

  1. 打开环境变量
  2. 点击 系统变量
  3. 重新启动 Windows

1
你在哪里设置路径?添加“new”,然后为每个Anaconda3文件夹创建一个路径? - Micah

17

15

我于04/2020遇到了这个问题。以下是我尝试的选项,最后一个解决方案帮助我解决了问题。

问题:

当我在Spyder IDE中使用Requests模块时,它运行良好,但是当我尝试在Windows中执行脚本时,会出现SSL错误。对于HTTP请求,它正常工作,但对于HTTPS请求,我收到SSL错误。

  1. 我尝试了Verify=True、False和Certs。相同的错误
  2. 删除Certifi-conda remove certifi-未起作用更新
  3. openssl,certifi-仍然是同样的错误(参考:https://github.com/ContinuumIO/anaconda-issues/issues/494)添加
  4. 路径变量-相同的错误
  5. 在Anaconda中创建新环境-相同的错误

解决方法:

来自:https://github.com/conda/conda/issues/8273的解决方案。

我从Anaconda3 \Library \bin复制了以下文件到\Anaconda3 \DLL

libcrypto-1_1-x64。* libssl-1_1-x64。*


2
这对我也有用!感谢您经历了所有的调试步骤 :) - Lou
1
我添加了许多环境变量,安装了 OpenSSL,但什么都不起作用...... 直到我尝试了你的最后一个解决方案。 :))) - An old man in the sea.
这个对我也是唯一有效的。 - bart cubrich
我发现这个答案很有启发性,因为它是“Conda Upgrade Python”的前置步骤。我正在使用Miniconda。升级过程中发现了不正确的版本需要“降级”和缺少的软件包。 - Jamie
是的!太好了,对于我们这些不太理解它如何工作的人来说,这个视频会带你了解:https://www.youtube.com/watch?v=lQ9t93FnqZc - Max Duso

11

8
我在我的Windows 10安装上遇到了同样的问题。在我复制了从Anaconda3\Library\bin到\Anaconda3\DLL的libcrypto-1_1-x64.dll和libssl-1_1-x64.dll之后,Anaconda Navigator才能打开。
一旦我这样做了,基本环境中的pip安装就能正常工作,但在我创建的另一个环境中无法正常工作。我不得不在新环境中也执行以上相同的操作。
也就是说,需要将从\Library\bin到\DLL的libcrypto-1_1-x64.dll和libssl-1_1-x64.dll进行复制,然后它就能正常工作了。

谢谢你的分享。我之前遇到了一个问题,一个Python环境正常工作,而另一个出现了上述可怕的SSL错误。在我的情况中,我只是用“正常工作”的环境中的libssl-1_1.dll库替换了问题环境中的副本,这样就解决了问题。 - user7611503

7

在处理完Windows 10上的同样问题后,解决方案非常简单:

  1. 打开Anaconda Prompt
  2. 运行 conda init
  3. 关闭并重新打开任何你想要运行代码的Python解释器(如PyCharm、Anaconda Prompt、cmd等)

再次运行你的代码,它应该可以正常工作了。我已经升级了Anaconda和PyCharm,并且在所有版本组合中都有这个问题,直到我运行了 conda init,它会像Paul Stevens的答案那样将路径添加到你的PATH中。不要跳过第3步——重启PyCharm或任何其他解释器非常重要。


非常感谢您!VSCode 刚刚在我的电脑上完成了每月自动更新,突然出现了这个问题,您的解决方案完美地解决了它 :) - Adam DS

6
我没有安装Anaconda,所以我采取的步骤是:
  • brew uninstall python3
  • brew install python3
    • 得到一个错误消息,指出: Your Xcode (10.2) is too outdated. Please update to Xcode 11.3 (or delete it). Xcode can be updated from the App Store.因此,我删除了Xcode,因为没有更新显示,然后重新安装它。
    • 之后运行xcode-select --install。如果不这样做...你将会得到一个错误:The following formula python cannot be installed as binary package and must be built from source. Install the Command Line Tools: xcode-select --install
  • 然后运行brew install python3,它成功完成了。

只是使用这个脚本来看看是否有效。

import requests
r = requests.get('https://www.office.com')
print(r)

运行了python3和python3.7脚本,输出结果为<Response [200]>,而不是SSLError。

4

如果您使用Anaconda Prompt,则无需将路径添加到环境中。

启动Anaconda提示符,切换到您的目录并从那里运行脚本或启动编辑器。这将确保您处于完整的Anaconda环境中,SSL错误将停止。

命令提示符和Anaconda提示符有什么区别?请参阅此SO答案以了解命令提示符和Anaconda提示符之间的区别


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接