NLTK下载SSL:证书验证失败

94

我在尝试为nltk安装Punkt时遇到了以下错误:

nltk.download('punkt')    
 [nltk_data] Error loading Punkt: <urlopen error [SSL:
 [nltk_data]     CERTIFICATE_VERIFY_FAILED] certificate verify failed
 [nltk_data]     (_ssl.c:590)>
False

在发布另一个答案之前,请注意:我们已经有一个回答,它说在Mac上运行Python目录中的.command文件,这个回答是在2017年给出的。我们不需要另一个只是改变目录中Python版本号的答案。 - undefined
17个回答

189
TLDR:这里有一个更好的解决方案:https://github.com/gunthercox/ChatterBot/issues/930#issuecomment-322111087 请注意,当你运行nltk.download()时,会弹出一个窗口让你选择要下载的包(下载不会立即开始)。
为了补充接受的答案,以下是在Mac上将被搜索的完整目录列表(不仅限于接受的答案中提到的目录):
    - '/Users/YOUR_USERNAME/nltk_data'
    - '/usr/share/nltk_data'
    - '/usr/local/share/nltk_data'
    - '/usr/lib/nltk_data'
    - '/usr/local/lib/nltk_data'
    - '/Users/YOUR_USERNAME/YOUR_VIRTUAL_ENV_DIRECTORY/nltk_data'
    - '/Users/YOUR_USERNAME/YOUR_VIRTUAL_ENV_DIRECTORY/share/nltk_data'
    - '/Users/YOUR_USERNAME/YOUR_VIRTUAL_ENV_DIRECTORY/lib/nltk_data'

如果上面的链接失效了,这里是完整粘贴的解决方案:
import nltk
import ssl

try:
    _create_unverified_https_context = ssl._create_unverified_context
except AttributeError:
    pass
else:
    ssl._create_default_https_context = _create_unverified_https_context

nltk.download()

在您喜欢的Python集成开发环境(IDE)或通过命令行中运行上述代码。

5
工作得像宝石一样。 - Jason Kao
是的,下载到了我的用户目录路径,并且运行得非常顺利。这非常有帮助,因为我没有管理员权限。实际上,我曾经在管理员旁边尝试过接受的答案,但对我来说并没有起作用。 - demongolem
多年后,这个解决方案仍然有效!谢谢! - User2345
这个解决方案对我没有用,可能不足以成为一个单独的答案,但是,记录一下,对我有效的方法是禁用我的 VPN。换句话说,如果你的 VPN 被列入黑名单等情况,有时候连接可能无法建立并返回此错误消息。 - Majte
由于某种原因,我无法在打开的窗口中点击并下载所需的模块。它只是没有安装。为了解决这个问题,我使用了与上面完全相同的代码,但在nltk.downlaod()内添加了标识符。我所需要的模型的标识符是"punkt",因此将nltk.download()替换为nltk.download('punkt')跳过了窗口并下载了我的包。除此之外,完美的解决方案,谢谢,我投票支持。 - chilifan

66

这是通过禁用SSL检查来实现的!

import nltk
import ssl

try:
    _create_unverified_https_context = ssl._create_unverified_context
except AttributeError:
    pass
else:
    ssl._create_default_https_context = _create_unverified_https_context

nltk.download()

这个对我有用!不是第一个。我需要像你提到的那样禁用SSL! - chikitin
这比在每次OS-X更新中寻找丢失的命令更可靠。 - dcsan
非常感谢,这个方法非常有效。我正在使用Python 3.8.0在OSX 10.14.6(Mojave)上,如果有用的话。 - David Maness

40

适用于Python 3.7.4和Mac OSX Mojave。 - Rahul Saini
可以在Big Sur上运行 :) - Nabin
1
我更喜欢这个解决方案,因为它涉及使Python的SSL检查实际工作,而不是完全禁用SSL证书检查。可能风险较低,但接受的答案似乎会让您面临中间人攻击的风险。 - Paul Cantrell
针对正在运行 Python3.10 的用户...只需运行以下命令 "/Applications/Python 3.10/Install Certificates.command" - Arthur Vaz
Mac-Pro-m2的一个绝佳解决方案 - Amin Zayeromali

30

在Finder中搜索“Install Certificates.command”,然后打开它。

然后在终端中执行以下步骤:

python3
import nltk
nltk.download()

谢谢。工作正常!适用于macOS 10.13.6。 - horacioibrahim

28

下载器脚本出了问题。作为临时解决方法,可以从此处手动下载punkt分词器,然后将未压缩的文件夹放到相应位置。每个操作系统的默认文件夹如下:

  • Windows:C:\nltk_data\tokenizers
  • OSX:/usr/local/share/nltk_data/tokenizers
  • Unix:/usr/share/nltk_data/tokenizers

11
这是我在MAC OS解决它的方法。 在安装nltk后,我一开始遇到了SSL错误。
解决方案: 前往
cd /Applications/Python\ 3.8

运行该命令

./Install\ Certificates.command

现在,如果您再试一次,它应该可以正常工作!

非常感谢这篇文章


7

您只需执行以下简单步骤安装证书:

在Python应用程序文件夹中,双击文件“Certificates.command”

这将使提示窗口出现在屏幕上,并自动为您安装证书,请关闭此窗口并重试。


4

我的解决方案是:

  • 这里下载punkt.zip并解压缩
  • 在主文件夹下创建nltk_data/tokenizers文件夹
  • 将punkt文件夹放入tokenizers文件夹中

3
在正式的错误报告中,有一种非常简单的方法可以解决所有这些问题。针对最近(例如 2019 年)使用 MacOS 遇到此问题的其他人,在 https://bugs.python.org/issue28150 的错误报告中提到:

...有一个简单的可双击或命令行运行的脚本(“/Applications/Python 3.6/ Install Certificates.command”),它会执行两个操作:1. 使用 pip 安装 certifi 和 2. 在 OpenSSL 目录中创建符号链接,指向 certifi 安装包位置。

在我使用 MacOS(截至撰写本文时是10.15 beta)时,简单地运行“Install Certificates.command”脚本就可以解决我的问题,然后我就可以开始运行了。


1
我刚刚升级到最新的 MacOS 10.15,但是找不到 "Install Certificates.command" 文件。/Applications/Python 3.x 目录也不存在。 - Kirill
你正在使用哪个版本的Python? - Michael Hawkins
Python 3.7.3自带于macOS 10.15的/usr/bin/python3目录下。 - Kirill
我也在使用Python 3,但不是预安装的。也许这就是区别所在。尝试安装另一个版本,看看是否存在目录以供您执行这些操作。要么是在之后的版本(3.6之后)中更改了目录,虽然我怀疑这一点。等我回到我的Mac时,我会进行验证。 - Michael Hawkins

3

对于Mac用户,只需在终端中复制粘贴以下内容:

/Applications/Python\ 3.10/Install\ Certificates.command ; exit;

1
你的回答可以通过提供更多支持信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人可以确认你的答案是正确的。您可以在帮助中心中找到有关如何编写良好答案的更多信息。 - user11717481

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