Cx_Freeze строится без ошибок, но exe не открывается - PullRequest
0 голосов
/ 12 декабря 2018

Я пытаюсь собрать exe-файл, используя cx_Freeze, который использует несколько модулей:

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-файл.Однако, когда я пытаюсь открыть исполняемый файл, он просто не открывается.Если кратко, кажется, вспыхнуть окна, но затем исчезает.Мой setup.py такой:

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')]
)

Мигающий экран содержит следующую трассировку:

Трассировка (последний вызов был последним): Файл "C: \ Users \ X \"AppData \ Local \ Programs \ Python \ Python37 \ lib \ site-packages \ cx_Freeze \ initscripts__startup __. Py ", строка 14, в файле module.run () запускается файл" C: \ Users \ X \ AppData \ Local \ Programs \ Python \ "Python37 \ lib \ site-packages \ cx_Freeze \ initscripts \ Console.py ", строка 26, в run exec (код, m. dict ), файл" print.py ", строка 1, в файле" C: \ Users \ X \ AppData \ Local \ Programs \ Python \ Python37 \ lib \ tkinter__init __. Py ", строка 36, в import _tkinter # Если это не удается, возможно, Python не настроен для Tk ImportError: Ошибка загрузки DLL: Указанный модульне может быть найден.

1 Ответ

0 голосов
/ 12 декабря 2018

Вы должны указать cx_Freeze включить библиотеки DLL TCL и TK в каталог сборки.

Для cx_Freeze 5.1.1 (текущая версия) или 5.1.0 библиотеки DLL должны быть включены в подкаталог lib каталога сборки.Вы можете сделать это, передав кортеж (source, destination) соответствующей записи опции списка 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 в настройкеcall (и вы также должны передать base, который вы определили, Executable):

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_Freeze библиотеки DLL должны быть включены непосредственно в каталог сборки.Это можно сделать с помощью:

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