在使用pyinstaller生成main.py to exe之后,当发出Api请求到二进制时,我会得到以下错误:
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
在服务器上,程序已经连续运行了一个多星期,没有问题,直到两天前我开始获得OSError。但是只有API调用导致程序仍在运行时出现错误,websockets仍在接收数据。
我尝试在python requests can't find a folder with a certificate when converted to .exe接受的答案中添加代码
我也试过:
pip config set global.cert "path\to\cacert.pem"
具有正确的cacert.pem路径,使用
python -c "import certifi; print(certifi.where())"
这些方法都不起作用,目前我找到的唯一解决办法是手动将cacert.pem文件复制到OSError表示正在查找它的位置( cacert.pem文件)。
但我以前从没这么做过。最近,由于websocket问题,我更新了python版本,然后再次降级。为此,我完全卸载python 3.10,从PATH中删除所有引用,然后重新安装3.9.7,并添加所有路径变量。
有人知道是什么导致了这一切吗?当我以pycharm本身运行脚本时,我没有得到这个错误,我还注意到global.cert与本地机器上的OSError不是相同的路径,但是我不知道如何从cacert.pem文件中更改它的位置。
发布于 2021-12-23 19:32:17
好的,现在我找到了一个临时的解决方案。同样发生的是,在程序寻找cacert.pem文件的地方,没有这样的文件。因此,我发现了一个解决办法:在您的项目终端中,转到外部库-> Python3.9 ->站点-packages ->证书-> 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\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时。如果我找到确切的原因。
https://stackoverflow.com/questions/70094634
复制相似问题