pyinstaller 编译文件出现 SSL 问题,错误:185090050

2 投票
3 回答
4587 浏览
提问于 2025-04-17 13:26

我有一些Python代码,在我的Windows电脑上用Python的IDE和命令提示符运行得很好。

但是,当我用pyinstaller把它打包成一个文件后,就出现了以下错误:

Traceback <most recent call last>:
    File "<string>", line 51, in <module>
    File "build\bdist.win32\egg\oauth2\__init__.py", line 682, in request
    ... ((traceback through httplib2 and then ssl))
ssl.SSLError: [Errno 185090050] _ssl.c:340: error:0B084002:x509 certificates routines:X509_load_cert_crl_file:system lib

导致这个错误的代码片段如下:

     import oauth2 as oauth
     import httplib2
     import urlparse

     #consumer inputs
     consumer_key    =   'blah'
     consumer_secret =   'blah'
     consumer = oauth.Consumer(consumer_key, consumer_secret)

     #other inputs
     request_token_url = 'https://api.linkedin.com/uas/oauth/requestToken?scope=r_network'
     access_token_url =  'https://api.linkedin.com/uas/oauth/accessToken'
     authorize_url =     'https://api.linkedin.com/uas/oauth/authorize'

     #instantiate consumer object
     client = oauth.Client(consumer)
     resp, content = client.request(request_token_url, "POST", )

这应该是一个简单的API请求!我到处查找过,并尝试在代码开头加上以下内容:

    httplib2.Http(ca_certs = 'cacert.pem')

...但是没用。

我还把httplib2文件夹里的cacerts.txt文件替换成了新的cacert.pem(改名为cacerts.txt)……但这也没用。

我尝试用这个来禁用SSL:

    httplib2.Http(disable_ssl_certificate_validation=True)

...但这也没用。

我该如何用pyinstaller编译我的Python脚本,才能不出错呢?

3 个回答

-1

你需要在你的系统中找到cacerts.txt这个文件,并确保你有权限去读取它。

0

我自己解决了问题!在我的代码中的每一行后面:

    client = oauth.Client(consumer)

我加了这一行:

    client.ca_certs = os.path.join(os.path.dirname(__file__),'cacert.pem')

然后我把'cacert.pem'这个文件和我的可执行文件放在一起。超级简单。

4

我在尝试用OAuth 2.0连接谷歌云盘时也遇到了同样的问题。我搜索了一下,发现解决办法是在httplib2的init.py文件中把这一行

CA_CERTS = os.path.join(
    os.path.dirname(os.path.abspath(__file__ )), "cacerts.txt")

换成这一行

CA_CERTS = os.path.join(os.path.dirname(sys.executable), "cacerts.txt")

然后生成.exe文件,并把"cacerts.txt"文件放在.exe文件的同一个文件夹里。

这个方法对我有效,希望对你也有帮助!

撰写回答