首页 > 解决方案 > 使用 cx_Freeze 创建的可执行文件在 Windows 上崩溃

问题描述

我正在尝试使用 cx_Freeze 创建一个可执行文件,它会创建 exe,但是每当我尝试启动它时,它就会崩溃并出现一些错误(见下文)。

setup.py

from cx_Freeze import setup, Executable
import sys
import glob
import os
import zlib
import shutil

base = None
# PYTHON_INSTALL_DIR = os.path.dirname(os.path.dirname(os.__file__))
os.environ['TCL_LIBRARY'] = "C:\\ProgramData\\Anaconda3\\tcl\\tcl8.6"
os.environ['TK_LIBRARY'] = "C:\\ProgramData\\Anaconda3\\tcl\\tk8.6"
os.environ['TESSERACT_LIBRARY'] = "E:\\Tesseract-OCR"

if sys.platform == 'win32':
    base = "Win32GUI"

if sys.platform == 'win64':
    base = "Win64GUI"

include = [ 'jinja2', 'jinja2.ext',] #Include packages

includefiles = ['gui/']

options = {'build_exe':{'includes':include,'include_files': includefiles}}   

flaskapp = Executable(script="scan_config.py",
                       targetName="D2D.exe",
                   )

setup(
    name="D2D",
    version="1.0",
    author="abc",
    description="D2d",
    options={
        'build_exe': {
            'include_files': includefiles,
            'includes': include,
            'build_exe': "build"
        }
    },
    executables=[flaskapp]
)

错误:

回溯(最后一次调用):文件“scan_config.py”,第 5 行,文件“C:\Users\abc\AppData\Roaming\Python\Python37\site-packages\flask__init__.py”,第 14 行,来自jinja2 导入转义文件“C:\ProgramData\Anaconda3\lib\site-packages\jinja2__init__.py”,第 82 行,_patch_async() 文件“C:\ProgramData\Anaconda3\lib\site-packages\jinja2__init__.py”,第 78 行,在 _patch_async from jinja2.asyncsupport import patch_all File "C:\ProgramData\Anaconda3\lib\site-packages\jinja2\asyncsupport.py",第 13 行,在 import asyncio File "C:\ProgramData\Anaconda3\lib\ asyncio__init__.py”,第 8 行,来自 .base_events 导入 * 文件“C:\ProgramData\Anaconda3\lib\asyncio\base_events.py”,第 37 行,来自 .base_events 导入常量 ImportError:无法导入名称'

PS 我也试过 PyInstaller,但我不知道如何包含 pytesseract。

标签: python-3.xwindowscx-freeze

解决方案


我将python版本降级为3.6。这解决了大部分错误。对于 jinja2 我做了pip install https://github.com/pallets/jinja/zipball/master,并且还包括了mkl&libiomp5md文件。在多处理文件夹中,我更改Pool.pycpool.pyc


推荐阅读