В скомпилированном файле pyinstaller возникла ошибка ssl, ошибка: 185090050
У меня есть некоторый код Python, который успешно работает на моем компьютере с Windows в командной строке python ide и cmd.
после компиляции с помощью 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')
... это не сработало.
я также заменил свой файл cacerts.txt в папке httplib2 новым cacert.pem (переименованным в cacerts.txt)... но это не сработало.
Я пытался отключить SSL с этим:
httplib2.Http(disable_ssl_certificate_validation=True)
... но это не сработало.
Как мне скомпилировать мой скрипт на python, используя pyinstaller, чтобы не было проблем?
3 ответа
У меня была такая же проблема, когда я пытался подключиться к Google Drive с 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.
У меня это сработало, надеюсь, у тебя тоже!
Решил мою собственную проблему! После каждой строки это в моем коде:
client = oauth.Client(consumer)
Я добавил эту строку:
client.ca_certs = os.path.join(os.path.dirname(__file__),'cacert.pem')
Тогда я просто сохранил файл 'cacert.pem' с моим exe. Супер просто.
Вы должны найти файл cacerts.txt в вашей системе и убедиться, что у вас есть права на его чтение.