Error al usar las solicitudes en una aplicación congelada
-
20-12-2019 - |
Pregunta
Estoy tratando de usar la excelente biblioteca de solicitudes en una aplicación congelada.El código funciona bien cuando se interpreta, pero deja de funcionar cuando genero el DIST ejecutable.
Probé esta solución, pero no está funcionando ( solicitudes de solicitudes: faltaarchivo después de cx_freeze )
My Setup.py Archivo:
import esky.bdist_esky
from esky.bdist_esky import Executable as Executable_Esky
from cx_Freeze import setup, Executable
from myapp import VERSION
import requests.certs
packages = [
'PIL',
'_winreg',
'esky',
]
includes = [
'PySide',
'sys',
'os',
'datetime',
'threading',
'Queue',
'uuid',
'requests',
]
excludes = [
'TKinter',
'tcl',
'ttk',
]
include_files =["icon-16px.ico",
"icon-32px.ico",
"logo-t-160x56.png",
]
setup(
scripts = [
Executable_Esky(
"myapp.py",
gui_only = False,
icon = "icon-16px.ico",
),
],
data_files = include_files,
options={"build_exe":
{"packages":packages,
"includes": includes,
"include_files": include_files + [(requests.certs.where(),'cacert.pem')],
"excludes": excludes,
"optimize": 2,
"icon":"icon-16px.ico",
},
"bdist_esky":{
'freezer_module':"cxfreeze",
'includes': includes,
'excludes': excludes,
},
},
executables = [Executable(script="myapp.py",base="Win32GUI")],
)
Corrector:
Traceback (most recent call last):
File "C:\Users\Fernando\Dropbox\the all-seeing boss\myapp_client\testes\cx
_freeze\qt_gui\interface_qt.py", line 45, in login
r = requests.post(url, data=data)
File "C:\Python27\lib\site-packages\requests\api.py", line 88, in post
return request('post', url, data=data, **kwargs)
File "C:\Python27\lib\site-packages\requests\api.py", line 44, in request
return session.request(method=method, url=url, **kwargs)
File "C:\Python27\lib\site-packages\requests\sessions.py", line 383, in reques
t
resp = self.send(prep, **send_kwargs)
File "C:\Python27\lib\site-packages\requests\sessions.py", line 486, in send
r = adapter.send(request, **kwargs)
File "C:\Python27\lib\site-packages\requests\adapters.py", line 385, in send
raise SSLError(e)
requests.exceptions.SSLError: [Errno 185090050] _ssl.c:343: error:0B084002:x509
certificate routines:X509_load_cert_crl_file:system lib
Solución 2
Obtuve este siguiente problema en GitHub ( https://github.com/ Kennethreitz / Solicitudes / Temas / 557 # Issuecomment-6420819 ).Gracias Martjin Pieters para este consejo.
En primer lugar, puse el archivo cacert.pem en la carpeta de mi proyecto y luego incluyí esto en la aplicación congelada:
include_files =["icon-16px.ico",
"icon-32px.ico",
"logo-t-160x56.png",
"cacert.pem",
]
setup(
scripts = [
Executable_Esky(
"myapp.py",
gui_only = False,
icon = "icon-16px.ico",
),
],
data_files = include_files,
options={"build_exe":
{"packages":packages,
"includes": includes,
"include_files": include_files,
"excludes": excludes,
"optimize": 2,
"icon":"icon-16px.ico",
},
"bdist_esky":{
'freezer_module':"cxfreeze",
'includes': includes,
'excludes': excludes,
},
},
executables = [Executable(script="myapp.py",base="Win32GUI")],
)
y para los últimos debe indicar este certificado en cada publicación o obtener el uso de requests
, como este:
r = requests.post(url, data=data, verify = os.path.join(appdata,'cacert.pem'))
xd
Otros consejos
o puedes usar
import requests.certs
build_exe_options = {"include_files":[(requests.certs.where(),'cacert.pem')]}