当前位置: 首页 > 知识库问答 >
问题:

Cx_Freeze建设没有错误,但exe不打开

轩辕亮
2023-03-14

我正在尝试使用cx\U Freeze构建一个exe,它使用几个模块:

import tkinter as tk
from tkinter import ttk
import random, time, bluetooth, json, sys, os
from _thread import *
from threading import Thread, Lock

当我尝试构建exe时,它似乎工作得很好:它不会引发任何错误并创建包含exe文件的构建文件夹。但是,当我试图打开exe文件时,它根本无法打开。如果短暂地闪烁一个窗口,然后消失。我的设置。这是什么

from cx_Freeze import setup,Executable
import sys
import os

PYTHON_INSTALL_DIR = os.path.dirname(os.path.dirname(os.__file__))
os.environ['TCL_LIBRARY'] = os.path.join(PYTHON_INSTALL_DIR, 'tcl', 'tcl8.6')
os.environ['TK_LIBRARY'] = os.path.join(PYTHON_INSTALL_DIR, 'tcl', 'tk8.6')

includes = []
include_files = []
packages = []
base = "Win32GUI"
setup(
    name = 'Buzzer',
    version = '0.1',
    description = 'Buzzer application',
    author = 'Me',
    executables = [Executable('Buzzer.py')]
)

闪烁屏幕包含以下回溯:

Traceback(最近一次调用最后一次):文件"C:\用户\X\AppData\本地\程序\Python\Python37\lib\site-包\cx_Freeze\initscripts__startup__. py",第14行,运行module.run()文件"C:\用户\X\AppData\本地\程序\Python\Python37\lib\site-包\cx_Freeze\init脚本\Console.py",第26行,在运行exec(代码,m.dict)文件"print.py"中,第1行,在文件"C:\用户\X\AppData\本地\程序\Python\Python37\lib\tkinter__init__. py"中,第36行,在导入_tkinter#如果失败您的Python可能未配置为Tk重要错误:DLL加载失败:找不到指定的模块。

共有1个答案

杜经艺
2023-03-14

您需要告诉cx\u Freeze将TCL和TK DLL包含在构建目录中。

对于cx_Freeze5.1.1(当前版本)或5.1.0,DLL需要包含在构建目录的lib子目录中。您可以通过将元组(源,目标)传递到include_files列表选项的相应条目来实现这一点:

include_files = [(os.path.join(PYTHON_INSTALL_DIR, 'DLLs', 'tk86t.dll'), os.path.join('lib', 'tk86t.dll')),
                 (os.path.join(PYTHON_INSTALL_DIR, 'DLLs', 'tcl86t.dll'), os.path.join('lib', 'tcl86t.dll'))]

您需要将此include_files列表传递给安装调用中的build_exe选项(您还应该将您定义的base传递给Execable):

setup(
    name = 'Buzzer',
    version = '0.1',
    description = 'Buzzer application',
    author = 'Me',
    options={'build_exe': {'include_files': include_files}},
    executables = [Executable('Buzzer.py', base=base)]
)

对于其他cx\u Freeze版本,DLL需要直接包含在构建目录中。这可以通过以下方式实现:

include_files = [os.path.join(PYTHON_INSTALL_DIR, 'DLLs', 'tk86t.dll'),
                 os.path.join(PYTHON_INSTALL_DIR, 'DLLs', 'tcl86t.dll')]
 类似资料:
  • 问题内容: 我到处都在搜寻这个答案,但是找不到答案。我有一个与tkinter接口的python脚本(3.3)。我使用cx_freeze从中创建可执行文件,并获得了一个包含一些文件和文件夹的build文件夹。我双击.exe文件,但没有任何反应。我正在使用以下设置: 如果我只是打开我的代码并运行它,则该界面将完美运行。进行构建时,我没有收到任何错误消息(至少我看不到…顺便说一句,我该如何验证?)。关于

  • 问题内容: 我有一个返回内部服务器错误(500)的php应用程序时出现问题,但错误日志中未显示任何内容。 现在,我知道我要运行的内容有错误,我知道缺少某些文件,但没有丢失,但是应该在apache错误日志中显示某些内容(否则,我应该如何确切知道丢失的内容)。 我创建了一个测试脚本,该脚本在相同的vhost配置下出错,并且这些错误显示得很好,因此一切似乎都已正确配置到php / apache。是否有某

  • 我订阅了Firebase Project,以便通过Web发送通知。 我准备了一个HTML页面来允许通知并获取实例ID令牌。一旦得到这个I.I.令牌,我就使用“REST控制台”发出POST请求来发送我的第一个通知。 以上是有关请求的更多信息: 让我解释一些密钥: -授权头:密钥是Firebase控制台中的服务器密钥。 -JSON中的“to”字段是我请求使用通知权限的HTML页面中出现的实例ID令牌。

  • 问题内容: 我一直在拼命试图将我的python pygame程序编译为独立的可执行文件,但没有成功。PyInstaller无法与pygame一起正常运行,Nuitka无法使独立运行,并且cx_Freeze正在寻找最佳选择。但是,当我使用自己的进行编译时,它将生成一组文件,但是可执行文件无法运行。 我的如下: 还有其他由python引用的python文件。这有关系吗? 非常感谢 编辑:根据要求,平台

  • 我一直在拼命地将我的python pygame程序编译成独立的可执行文件,但没有成功。PyInstaller不能与pygame一起正常工作,Nuitka不能制作正常工作的standalones,cx_Freeze看起来是最好的选择。但是,当我使用,它生成一组文件,但可执行文件不运行。 我的如下所示: 还有其他python文件被引用;这有关系吗? 非常感谢 编辑:根据要求,平台Linux(Ubunt