OSError:找不到合适的 TLS CA 证书包

问题描述 投票:0回答:1

当向 binance 发出 Api 请求时,在使用 pyinstaller 将 main.py 构建为 exe 后,我收到此错误:

OSError: Could not find a suitable TLS CA certificate bundle, invalid path: C:\Users\ADMINI~1\AppData\Local\Temp\2\_MEI76602\certifi\cacert.pem 

在我运行机器人的服务器上,在本地机器上:

OSError: Could not find a suitable TLS CA certificate bundle, invalid path: C:\Users\USER\PycharmProjects\pythonproject2\dist\cacert.pem 

两者错误的确切位置是:

File "requests\adapters.py", line 227, in cert_verify

在服务器上,程序已经连续运行了一个多星期,没有任何问题,直到 2 天前我开始收到 OSError。但只有 API 调用导致错误,程序仍在运行,websockets 仍在接收数据。

我尝试在 python 请求的接受答案中添加代码,在转换为 .exe 时找不到带有证书的文件夹

我也试过:

pip config set global.cert "path\to\cacert.pem"

使用 cacert.pem 的正确路径,发现使用

python -c "import certifi; print(certifi.where())"

这些都行不通,目前我发现的唯一解决方法是手动将 cacert.pem 文件复制到 OSError 表示正在寻找它的位置(cacert.pem 文件)。

但我以前从来没有这样做过。最近我更新了我的 python 版本,然后由于 websocket 问题再次降级。我通过完全卸载 python 3.10 并从 PATH 中删除所有引用然后重新安装 3.9.7 并添加所有 PATH 变量来做到这一点。

有人知道是什么原因造成的吗?当我在 pycharm 本身中运行脚本时,我没有收到此错误,我还注意到 global.cert 与本地计算机上的 OSError 路径不同,但我不知道如何更改它在 cacert.pem 文件中的位置.

python ssl python-requests pycharm ca
1个回答
0
投票

好的,现在我找到了一个临时解决方案。同样发生的是,程序在寻找 cacert.pem 文件的地方,没有这样的文件。所以我找到了解决方法: 在您的项目终端中,转到外部库 -> Python3.9 -> 站点包 -> certifi -> core.py

然后寻找这个代码:

import os

try:
    from importlib.resources import path as get_path, read_text

    _CACERT_CTX = None
    _CACERT_PATH = None

    def where():
    .............

现在,当您运行该程序时,获取它抛出错误时查找 cacert.pem 的路径。将 cacert.pem 文件粘贴到 Temp 文件夹或 Temp 等中。然后复制路径。 将代码更改为:

import os

try:
    from importlib.resources import path as get_path, read_text

    _CACERT_CTX = None
    _CACERT_PATH = "copied path"

    def where():
    .............

此外,我在新系统上编译了完全相同的代码,一切正常。所以很可能问题出在我安装和卸载 3.10 时。如果我找到确切原因,将会更新。

© www.soinside.com 2019 - 2024. All rights reserved.