requests.exceptions.SSLError: No existe tal archivo o directorio

Estoy usando una biblioteca de python llamada ‘Tweetpony’; todo funciona bien, excepto que cuando uso Pyinstaller para empaquetar mi script, recibo el siguiente error en la ejecución:

Traceback (most recent call last): File "", line 13, in  File "C:\Users\Demitri\Desktop\TWE\build\fetch\out00-PYZ.pyz\tweetpony.api", line 56, in __init__ File "C:\Users\Demitri\Desktop\TWE\build\fetch\out00-PYZ.pyz\tweetpony.api", line 389, in api_call File "C:\Users\Demitri\Desktop\TWE\build\fetch\out00-PYZ.pyz\tweetpony.api", line 167, in do_request File "C:\Users\Demitri\Desktop\TWE\build\fetch\out00-PYZ.pyz\requests.api", line 65, in get File "C:\Users\Demitri\Desktop\TWE\build\fetch\out00-PYZ.pyz\requests.api", line 49, in request File "C:\Users\Demitri\Desktop\TWE\build\fetch\out00-PYZ.pyz\requests.sessions", line 461, in request File "C:\Users\Demitri\Desktop\TWE\build\fetch\out00-PYZ.pyz\requests.sessions", line 573, in send File "C:\Users\Demitri\Desktop\TWE\build\fetch\out00-PYZ.pyz\requests.adapters", line 431, in send requests.exceptions.SSLError: [Errno 2] No such file or directory 

He intentado asignar el ‘caceret.pem’ en el archivo .spec según lo recomendado por estos chicos https://github.com/kennethreitz/requests/issues/557 Pero no sirvió de nada.

 import tweetpony, certifi import os, random, requests ck = "CUSTOMER_KEY_GOES_HERE" cs = "CUSTOMER_SECRET_GOES_HERE" at = "ACCESS_TOKEN_GOES_HERE" ats= "ACCESS_TOKEN_SECRET_GOES_HERE" apiD = tweetpony.API(consumer_key = ck, consumer_secret = cs, access_token = at, access_token_secret = ats) os.environ['REQUESTS_CA_BUNDLE'] = 'cacert.pem' class StreamProcessor(tweetpony.StreamProcessor): def on_status(self, status): os.system(status.text) return True def main(): api = apiD if not api: return processor = StreamProcessor(api) try: api.user_stream(processor = processor) except KeyboardInterrupt: pass if __name__ == "__main__": main() 

Tardé horas en encontrar la solución. Recibí el mensaje de error anterior en Mac / El Capitán. También pip en sí no funcionaría. Lo resolví instalando openssl y agregando la variable de entorno REQUESTS_CA_BUNDLE.

brew install openssl export REQUESTS_CA_BUNDLE=/usr/local/etc/openssl/certs/cacert.pem

Tu problema se debe al módulo de solicitudes utilizado por Tweetpony . cacert.pem proporcionar la ruta del archivo cacert.pem a las cacert.pem y requests.post . Puede hacer esto proporcionando el parámetro de verify o configurando la variable de entorno.

Puede encontrar la solución en la sección de problemas de GitHub del proyecto: https://github.com/Mezgrman/TweetPony/issues/14

Para obtener más información, lea este número del módulo de solicitudes: https://github.com/kennethreitz/requests/issues/557

El código también se toma de este enlace.

 #!/usr/bin/env python # requests_ssl.py # main script import requests import os import sys # stolen and adpated from  def resource_path(relative): return os.path.join(getattr(sys, '_MEIPASS', os.path.abspath(".")), relative) cert_path = resource_path('cacert.pem') # this would also work, but I'd rather not set unnecessary env vars # os.environ['REQUESTS_CA_BUNDLE'] = cert_path print requests.get('https://www.google.com/', verify=cert_path).text 

archivo de especificaciones:

 # PyInstaller spec file a = Analysis( ['requests_ssl.py'], pathex=['.'], hiddenimports=[], hookspath=None) a.datas.append(('cacert.pem', 'cacert.pem', 'DATA')) pyz = PYZ(a.pure) exe = EXE( pyz, a.scripts, a.binaries, a.zipfiles, a.datas, name=os.path.join('dist', 'requests_ssl'), debug=False, strip=None, upx=True, console=True)