使用 cx_Freeze 创建的可执行文件在 windows 崩溃
Executable file created with cx_Freeze crashes on 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]
)
错误:
Traceback (most recent call last):
File "scan_config.py", line 5, in
File "C:\Users\abc\AppData\Roaming\Python\Python37\site-packages\flask__init__.py", line 14, in from jinja2 import escape
File "C:\ProgramData\Anaconda3\lib\site-packages\jinja2__init__.py", line 82, in _patch_async()
File "C:\ProgramData\Anaconda3\lib\site-packages\jinja2__init__.py", line 78, in _patch_async from jinja2.asyncsupport import patch_all
File "C:\ProgramData\Anaconda3\lib\site-packages\jinja2\asyncsupport.py", line 13, in import asyncio
File "C:\ProgramData\Anaconda3\lib\asyncio__init__.py", line 8, in from .base_events import *
File "C:\ProgramData\Anaconda3\lib\asyncio\base_events.py", line 37, in from . import constants
ImportError: cannot import name 'constants' from 'asyncio' (E:\engine\build\lib\asyncio__init__.pyc)
P.S。我也试过 PyInstaller,但我不知道如何包含 pytesseract。
我将 python 版本降级到 3.6。这解决了大部分错误。对于 jinja2,我做了 pip install https://github.com/pallets/jinja/zipball/master
,还包含了 mkl
和 libiomp5md
文件。在 multiprocessing 文件夹中,我将 Pool.pyc
更改为 pool.pyc
我正在尝试使用 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]
)
错误:
Traceback (most recent call last): File "scan_config.py", line 5, in File "C:\Users\abc\AppData\Roaming\Python\Python37\site-packages\flask__init__.py", line 14, in from jinja2 import escape File "C:\ProgramData\Anaconda3\lib\site-packages\jinja2__init__.py", line 82, in _patch_async() File "C:\ProgramData\Anaconda3\lib\site-packages\jinja2__init__.py", line 78, in _patch_async from jinja2.asyncsupport import patch_all File "C:\ProgramData\Anaconda3\lib\site-packages\jinja2\asyncsupport.py", line 13, in import asyncio File "C:\ProgramData\Anaconda3\lib\asyncio__init__.py", line 8, in from .base_events import * File "C:\ProgramData\Anaconda3\lib\asyncio\base_events.py", line 37, in from . import constants ImportError: cannot import name 'constants' from 'asyncio' (E:\engine\build\lib\asyncio__init__.pyc)
P.S。我也试过 PyInstaller,但我不知道如何包含 pytesseract。
我将 python 版本降级到 3.6。这解决了大部分错误。对于 jinja2,我做了 pip install https://github.com/pallets/jinja/zipball/master
,还包含了 mkl
和 libiomp5md
文件。在 multiprocessing 文件夹中,我将 Pool.pyc
更改为 pool.pyc