首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >brew安装Python3.6.1:[SSL: CERTIFICATE_VERIFY_FAILED]证书验证失败

brew安装Python3.6.1:[SSL: CERTIFICATE_VERIFY_FAILED]证书验证失败
EN

Stack Overflow用户
提问于 2017-06-20 09:42:48
回答 6查看 72.5K关注 0票数 42

我使用以下方法安装python 3.6

brew install python3

并试图从https下载一个带有six.moves.urllib.request.urlretrieve的文件,但它引发了错误。

ssl.SSLError: SSL: CERTIFICATE_VERIFY_FAILED证书验证失败(_ssl.c:749)

在Python (来自.pkg)中,自述表示需要在安装之后运行

  1. 安装certifi
  2. 将证书路径符号链接到certify路径

才能使用证书。

但是,在brew安装中,该文件不存在,而且似乎不运行。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2017-06-20 09:42:48

看来,由于某种原因,Brew还没有运行Install Certificates.command,这是Mac包中的Python3包。此问题的解决方案是在Install Certificates.command之后运行以下脚本(从brew install python3复制)

代码语言:javascript
运行
复制
# install_certifi.py
#
# sample script to install or update a set of default Root Certificates
# for the ssl module.  Uses the certificates provided by the certifi package:
#       https://pypi.python.org/pypi/certifi

import os
import os.path
import ssl
import stat
import subprocess
import sys

STAT_0o775 = ( stat.S_IRUSR | stat.S_IWUSR | stat.S_IXUSR
             | stat.S_IRGRP | stat.S_IWGRP | stat.S_IXGRP
             | stat.S_IROTH |                stat.S_IXOTH )


def main():
    openssl_dir, openssl_cafile = os.path.split(
        ssl.get_default_verify_paths().openssl_cafile)

    print(" -- pip install --upgrade certifi")
    subprocess.check_call([sys.executable,
        "-E", "-s", "-m", "pip", "install", "--upgrade", "certifi"])

    import certifi

    # change working directory to the default SSL directory
    os.chdir(openssl_dir)
    relpath_to_certifi_cafile = os.path.relpath(certifi.where())
    print(" -- removing any existing file or link")
    try:
        os.remove(openssl_cafile)
    except FileNotFoundError:
        pass
    print(" -- creating symlink to certifi certificate bundle")
    os.symlink(relpath_to_certifi_cafile, openssl_cafile)
    print(" -- setting permissions")
    os.chmod(openssl_cafile, STAT_0o775)
    print(" -- update complete")

if __name__ == '__main__':
    main()
票数 123
EN

Stack Overflow用户

发布于 2018-04-21 08:00:50

我的Mac解决方案:

1)使用从官方Python语言网站https://www.python.org/downloads/下载的本地应用Python升级到Python3.6.5

我发现这个安装程序负责更新新Python的链接和符号链接,比自制的要好得多。

2)使用刷新的Python3.6目录中的"./Install Certificates.command“安装一个新证书

cd“/Applications/Python3.6/”sudo“./安装Certificates.command”

票数 32
EN

Stack Overflow用户

发布于 2020-04-18 19:00:36

  • 找到默认的cafile:
代码语言:javascript
运行
复制
python -c 'import ssl; print(ssl.get_default_verify_paths().openssl_cafile)'

/Applications/Xcode.app/Contents/Developer/Library/Frameworks/Python3.framework/Versions/3.7/etc/ssl/cert.pem

代码语言:javascript
运行
复制
sudo mkdir -p /Applications/Xcode.app/Contents/Developer/Library/Frameworks/Python3.framework/Versions/3.7/etc/ssl/certs
  • 查找certifi的ca文件
代码语言:javascript
运行
复制
python -c 'import certifi; print(certifi.where())'

'/usr/local/lib/python3.7/site-packages/certifi/cacert.pem‘

  • 复制到
代码语言:javascript
运行
复制
sudo cp /usr/local/lib/python3.7/site-packages/certifi/cacert.pem
/Applications/Xcode.app/Contents/Developer/Library/Frameworks/Python3.framework/Versions/3.7/etc/ssl/certs/cert.pem
票数 22
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44649449

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档