python中的许多操作都需要通过https访问。这包括pip安装,或仅使用http.client.HTTPSConnection,或内部使用这些内容的任何模块或应用程序。
如果从官方python pkg安装程序安装python,从https://python.org下载,则它使用openssl的内部版本,并且不包含根证书。任何使用SSL连接的内容都会导致此错误:
class Foo {
private:
Bar& bar; // shared by other objects
int size;
//several other instance variables
static Bar& getDefaultBar();
public:
Foo(int s, Bar& b) : size(s), bar(b) {}
Foo(int s) : size(s), bar(getDefaultBar()) {}
}
Bar& Foo::getDefaultBar()
{
static Bar b(24);
return b;
}
如何安装根证书以使上述错误消失?
答案 0 :(得分:123)
运行python安装程序时,它们会向您显示此信息。它也记录在ssl.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:749)
中,但它很容易被忽视。
只需浏览/Applications/Python 3.6/ReadMe.rtf
,然后双击Applications/Python 3.6
Python bug跟踪器中存在此问题。 http://bugs.python.org/issue29480
答案 1 :(得分:12)
解决所有Python版本且无需在macOS上检查版本的简单方法
bash /Applications/Python*/Install\ Certificates.command
此命令等效于:
...
bash /Applications/Python\ 2.7/Install\ Certificates.command
bash /Applications/Python\ 3.6/Install\ Certificates.command
bash /Applications/Python\ 3.7/Install\ Certificates.command
...
它帮助了我,希望对您有帮助
答案 2 :(得分:8)
如果pip无法解决问题
pip3 install --upgrade certifi
如果找不到“ 安装证书。命令”
,请尝试以下脚本#!/usr/bin/env python3
# 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)
# +++> if already done <----
#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()
答案 3 :(得分:7)
我使用以下命令解决了这个问题:
open /Applications/Python\ 3.7/Install\ Certificates.command
我的机器上装有Python 3.7。
检查此链接-Fixing CERTIFICATE_VERIFY_FAILED error when trying requests-html out on Mac
答案 4 :(得分:3)
就我而言,所有解决方案都不适用于在macOS Catalina中安装了python3的系统,也不适用于通过brew安装的python3。
如果有人遇到这种情况并想要快速解决,
使用https://www.python.org/downloads/
在安装结束时,安装程序将向您显示一条注释,要求您运行Install Certificates.command
文件。
(在其他安装中,此文件不存在,并且the solution都没有使文件的源代码正常工作)
重新启动终端,您可以键入where python3
来查看/Library/Frameworks/Python.framework/Versions/3.8/bin/python3
。使用此二进制文件,应该不会出现此问题。
注意:可能可以使系统安装的python3正常工作,但就我而言;事实证明,这非常困难,所以我选择这种方式。
答案 5 :(得分:2)
如果您仍然安装了python3.5,那么只需使用python3.5。
推送到PyPI:
def number_letter(a, b):
lst = []
##a is the letters ["A", "B", "C"]
##b is the lists of numbers [[0.5, 0.5, 0], [0.05, 0.3, 0.65]]
##together if a user was calling it, it would look like this
##number_letter(["A", "B", "C"], [[0.5, 0.5, 0], [0.05, 0.3, 0.65]])
##Outputs relating numbers from 'b' with letters from 'a' in descending order (the values are summed)
##[[0.8, "B"], [0.65, "C"], [0.55, "A"]]
python3.5 setup.py register -r pypitest
pipping似乎可以正常使用3.6开箱即用..
答案 6 :(得分:0)
当我尝试在Keras数据加载中运行Python时,我遇到了同样的问题。对我来说,错误是:
Exception: URL fetch failure on AWS_URL: None -- [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:833)
我通过将证书升级为以下方式解决了我的问题:
pip install --upgrade certifi
答案 7 :(得分:0)
对我来说,这是请求的错误说明。我打了一个 https
电话而不是 http
电话。改成http就解决了。
答案 8 :(得分:0)
确认您不在 virtualenv 中。 我尝试了以上但没有成功,只是意识到我的安装失败了,因为我在一个 virtualenv 上
答案 9 :(得分:0)
确保您没有设置 SSL_CERT_FILE
环境变量。我遇到了同样的问题,我花了一段时间才发现某些应用程序在我的 bash 配置文件中将此变量设置为空字符串。
答案 10 :(得分:0)
我在 macOS Big Sur 上遇到了同样的问题。这是我为解决问题所做的工作。
IDE - Pycharm
已下载 Python 版本 - 3.9.6
注意:如果您的系统上同时安装了 anaconda 和 python,请检查您是否在 IDE 中使用了正确的 python 版本,该版本下载的是最新版本,而不是来自 Anaconda。
享受。
答案 11 :(得分:-2)
如果您使用的是macOS open finder,然后转到“应用程序”>“ Python3.7”文件夹(或您使用的任何版本的python)>双击“ Install Certificates.command”文件。