Google API y cx_Freeze no funcionan correctamente

He creado un progtwig Python que es capaz de cargar archivos en Google Drive. El archivo .py funciona perfectamente y no da ningún error.

Pero como lo distribuiré para las personas que no tienen Python instalado, debo convertir el progtwig y los recursos en un archivo .exe. Lo he hecho con cx_Freeze. Lo he usado antes y siempre ha funcionado.

Pero ahora, la API de Google Drive parece estar causando errores cuando se ejecuta el archivo .exe. Aquí están los errores que da:

Traceback (most recent call last): File "C:\Python27\lib\runpy.py", line 162, in _run_module_as_main "__main__", fname, loader, pkg_name) File "C:\Python27\lib\runpy.py", line 72, in _run_code exec code in run_globals File "Test.py", line 41, in  File "C:\Python27\lib\oauth2client\util.py", line 128, in positional_wrapper return wrapped(*args, **kwargs) File "C:\Python27\lib\oauth2client\client.py", line 1283, in step2_exchange headers=headers) File "C:\Python27\lib\site-packages\httplib2-0.8-py2.7.egg\httplib2\__init__.p y", line 1570, in request (response, content) = self._request(conn, authority, uri, request_uri, metho d, body, headers, redirections, cachekey) File "C:\Python27\lib\site-packages\httplib2-0.8-py2.7.egg\httplib2\__init__.p y", line 1317, in _request (response, content) = self._conn_request(conn, request_uri, method, body, he aders) File "C:\Python27\lib\site-packages\httplib2-0.8-py2.7.egg\httplib2\__init__.p y", line 1252, in _conn_request conn.connect() File "C:\Python27\lib\site-packages\httplib2-0.8-py2.7.egg\httplib2\__init__.p y", line 1021, in connect self.disable_ssl_certificate_validation, self.ca_certs) File "C:\Python27\lib\site-packages\httplib2-0.8-py2.7.egg\httplib2\__init__.p y", line 80, in _ssl_wrap_socket cert_reqs=cert_reqs, ca_certs=ca_certs) File "C:\Python27\lib\ssl.py", line 383, in wrap_socket ciphers=ciphers) File "C:\Python27\lib\ssl.py", line 141, in __init__ ciphers) ssl.SSLError: [Errno 185090050] _ssl.c:340: error:0B084002:x509 certificate rout ines:X509_load_cert_crl_file:system lib 

Da este error después de que el usuario haya escrito el código de autorización.

Después de un poco de depuración, descubrí que la línea que causaba este problema era

credentials = flow.step2_exchange(code)

Aquí hay un fragmento del código:

 flow = OAuth2WebServerFlow(CLIENT_ID, CLIENT_SECRET, OAUTH_SCOPE, REDIRECT_URI) authorize_url = flow.step1_get_authorize_url() webbrowser.open(authorize_url) code = raw_input('Enter verification code: ').strip() credentials = flow.step2_exchange(code) http = httplib2.Http() http = credentials.authorize(http) drive_service = build('drive', 'v2', http=http) 

El CLIENT_ID, CLIENT_SECRET, OAUTH_SCOPE y REDIRECT_URI están configurados correctamente.

Entonces, ¿cuál podría ser el problema aquí?

Si necesita ver más código, pregunte y actualizaré esta pregunta.

Parece que no puede encontrar sus certificados SSL. Esto es algo comprensible porque httplib2 los carga desde el sistema de archivos, y nada le dice a cx_Freeze que los ponga en el paquete empaquetado.

Lea esto, le ayudará: https://github.com/kennethreitz/requests/issues/557#issuecomment-6420819