使用cx_freeze后丢失文件,exe在Anaconda提示符下运行,但不在cmd

使用cx_freeze从python代码创建可执行文件时遇到了一些问题。生成的可执行文件从Anaconda提示符运行,但是在Windows cmd(或通过单击.exe)中运行时,程序将退出并显示与请求包相关的错误消息。

这是一个最小的工作示例。首先,将冻结的脚本:main.py

import requests

r = requests.get('https://github.com/')

print(r.text)

第二,cx_freeze的设置脚本:setup.py

import cx_Freeze

build_exe_options = {
        "includes": [],'include_files': [],'excludes' : [],'packages' : []
           }

base = None

executables = [cx_Freeze.Executable('main.py',base=base)]

cx_Freeze.setup(name = "MWE",options = {"build_exe": build_exe_options},executables = executables)

问题出在这里

  1. 在python中运行main.py可以正常工作
  2. 通过python setup.py build构建可执行文件很好
  3. 在Anaconda提示符下运行结果main.exe可以正常工作
  4. 在Windows cmd中运行main.exe(或通过单击鼠标开始)退出并显示以下错误消息:

    Traceback (most recent call last):
      File "P:\Anaconda3\lib\site-packages\cx_Freeze\initscripts\__startup__.py",line 40,in run
        module.run()
      File "P:\Anaconda3\lib\site-packages\cx_Freeze\initscripts\Console.py",line 23,in run
        exec(code,{'__name__': '__main__'})
      File "main.py",line 9,in <module>
        r = requests.get('https://github.com/')
      File "P:\Anaconda3\lib\site-packages\requests\api.py",line 75,in get
        return request('get',url,params=params,**kwargs)
      File "P:\Anaconda3\lib\site-packages\requests\api.py",line 60,in request
        return session.request(method=method,url=url,**kwargs)
      File "P:\Anaconda3\lib\site-packages\requests\sessions.py",line 533,in request
        resp = self.send(prep,**send_kwargs)
      File "P:\Anaconda3\lib\site-packages\requests\sessions.py",line 646,in send
        r = adapter.send(request,**kwargs)
      File "P:\Anaconda3\lib\site-packages\requests\adapters.py",line 514,in send
        raise SSLError(e,request=request)
    requests.exceptions.SSLError: HTTPSConnectionPool(host='github.com',port=443): Max retries exceeded
    with url: / (Caused by SSLError("Can't connect to HTTPS URL because the SSL module is not available."))
    

在研究了相关问题之后,似乎出现的问题是某些DLL没有复制到应用程序的构建文件夹中,因此应用程序无法找到这些文件。我尝试过但未取得积极结果的内容:

  1. 在设置脚本中使用了includespackages选项,以包含某些软件包(如here所述)
  2. 手动将libssllibcrypto复制到构建文件夹(如herehere所述)
  3. 通过设置脚本中的include_files选项复制相同的文件
  4. herehere所述,将(requests.certs.where(),'cacert.pem')添加到include_filesos.environ["REQUESTS_CA_BUNDLE"] = os.path.join(os.getcwd(),"cacert.pem")添加到setup.py

有人知道如何避免这个问题吗?有谁知道如何找出确切缺少的文件,以便可以将其复制到应用程序文件夹中?除了requests之外,其他软件包也遇到了同样的问题。

zjd1987zjd 回答:使用cx_freeze后丢失文件,exe在Anaconda提示符下运行,但不在cmd

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3106282.html

大家都在问