В скомпилированном файле 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 в вашей системе и убедиться, что у вас есть права на его чтение.

Другие вопросы по тегам