在冻结的应用程序中使用请求时出错

2024-04-20 11:47:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试在一个冻结的应用程序中使用卓越请求库。代码在解释时可以正常工作,但是当我生成dist可执行文件时,它就停止工作了。在

我尝试过这个解决方案,但它不起作用(Requests library: missing file after cx_freeze

我的设置.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")],
)

回溯:

^{pr2}$

Tags: frompyimportincludepackagesfilesrequestsmyapp
2条回答

或者你可以用

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

我在github(https://github.com/kennethreitz/requests/issues/557#issuecomment-6420819)上看到了这个问题。谢谢你Martjin Pieters的建议。在

首先,我把卡塞特·佩姆文件放在我的项目文件夹中,然后我将其包含在冻结的应用程序中:

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

最后,您必须在每个POST或GET中使用requests指示此证书,如下所示:

^{pr2}$

XD公司

相关问题 更多 >