操作系统错误:无法找到合适的TLS CA证书捆绑包。

7

当向币安发出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中运行脚本时,我不会收到这个错误,我还注意到全局证书不是本地机器上OSError所指定的路径,但我不知道如何更改它搜索cacert.pem文件的位置。

1个回答

0

好的,目前我找到了一个临时解决方案。还有一个问题是,在程序寻找cacert.pem文件的位置,没有这样的文件。所以我找到了一个解决办法: 在你的项目终端中,转到外部库 -> Python3.9 -> site-packages -> 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\2 等中,然后复制该路径。 更改代码为:

import os

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

    _CACERT_CTX = None
    _CACERT_PATH = "copied path"

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

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


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