pyinstaller 编译文件出现 SSL 问题,错误:185090050
我有一些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文件的同一个文件夹里。
这个方法对我有效,希望对你也有帮助!