Ошибка с использованием запросов в замороженном приложении

StackOverflow https://stackoverflow.com//questions/22001130

Вопрос

Я пытаюсь использовать библиотеку запросов экскавации в замороженном приложении.Код работает нормально при интерпретации, но он перестает работать, когда я генерирую исполняемый раздел.

Я попробовал это решение, но он не работает ( Библиотека запросов: отсутствуетФайл после CX_FREEZE )

Моя файл setup.py:

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")],
)
.

traceback:

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
.

Это было полезно?

Решение 2

Я получил это после этого вопроса на github ( https://github.com/ kennethreitz / запросы / проблемы / 557 # ISSUEComment-6420819 ).Спасибо, Мартин Питерс за этот совет.

Прежде всего, я поставил файл cacert.pem в папке моего проекта, а затем включил это в приложение Frozen:

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")],
)
.

А для последнего вы должны указать этот сертификат в каждом посте или получить использование requests, как это:

r = requests.post(url, data=data, verify = os.path.join(appdata,'cacert.pem'))
.

xd

Другие советы

или вы можете использовать

import requests.certs
build_exe_options = {"include_files":[(requests.certs.where(),'cacert.pem')]}
.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top