2016-05-24 9 views
1

Ich versuche, eine eigenständige exe aus einem Skript in Python 3.5 geschrieben mit cx_Freeze erstellen, um es auf Computern ohne Python ausführen zu können.Fehler beim Ausführen von tkinter exe mit cx_freeze gemacht

Das Programm selbst ist nur ein kleiner Rechner mit einer einfachen Benutzeroberfläche mit tkinter. Ich verwende Windows 10.

Ich erstellte ein Setup-Skript, das so aussieht.

import sys 
from cx_Freeze import setup, Executable 
# replaces commandline arg 'build' 
sys.argv.append("build") 

filename = "Widgets_tmp.py" 
base = None 
if sys.platform == "win32": 
    base = "Win32GUI" 
setup(
    name = "Widgets", 
    version = "1.0", 
# options={"build_exe": {"packages": ["tkinter"]}}, 
    description = "cx_Freeze Tkinter script", 
    executables = [Executable(filename, base=base)]) 

Das läuft ohne Probleme, bis ich versuche, die exe zu starten. Dann bekomme ich diesen Fehler:

Traceback (most recent call last): 
    File "C:\python64\lib\site-packages\cx_freeze\initscripts\Console.py" 
line 21, in <module> 
    exec(code, m.__dict__) 
    File "Widgets_tmp.py", line 1, in <module> 
    File "C:\python64\lib\tkinter\__init__.py", line 35, in <module> 
    import _tkinter#If this fails you Python may not be configured for Tk 
ImportError: DLL load failed: 

Ich habe versucht, einschließlich tkinter manualy im Code im Code kommentiert und in „schließt“ anstelle von „Paketen“, aber mit dem gleichen Ergebnis.

vielleicht sollte ich sagen, dass der Linie 1 in Widgets_tmp.py wie folgt aussieht:

import tkinter as tk 

Ich habe versucht, den Beispielcode von der Quelle Einfrieren aber den gleichen Fehler. Beide Codes funktionieren perfekt mit Python.

Ich habe auch versucht mit:

options={"build_exe": {"includes": ["tkinter"]}}, 

aber kein Glück.

+0

Vielleicht müssen Sie das Befehlszeilenargument '- include-modules' für' tkinter' verwenden. Siehe http://stackoverflow.com/questions/2223128/cx-freeze-importerror-cannot-import-name – martineau

+0

Diese Frage gab mir die Idee zu versuchen, Tkinter zu den Includes Option und Pakete hinzufügen, aber das hat nicht funktioniert. Ich bin sowohl für die Programmierung als auch für die Verwendung der Befehlszeile ziemlich neu. Die Erinnerungen von DOS kommen jedoch zurück. Soll ich einfach - include-modules zum Befehl "python Widgets_tmp.py Build" hinzufügen oder muss ich tkinter irgendwie angeben? – Brute

+0

Die Antwort auf die verknüpfte Frage habe ich so verstanden, dass Sie das 'tkinter'-Modul einfügen müssen, das Sie entweder mit der Befehlszeilenoption' - include-modules 'ODER mit einem 'includes = 'Zeile in Ihrem setup.py-Skript. – martineau

Antwort

4

Eine tkinter exe wurde richtig ausgeführt, indem setup.py auf meinem PC geändert wurde.

OS = win7, Python = 3.5.2, cx_freeze = 5,0

setup.py:

includes  = [] 
include_files = [r"C:\Users\(USERNAME)\AppData\Local\Programs\Python\Python35-32\DLLs\tcl86t.dll", \ 
       r"C:\Users\(USERNAME)\AppData\Local\Programs\Python\Python35-32\DLLs\tk86t.dll"] 

setup(
    name = "Test", 
    version = "1.0", 
    options = {"build_exe": {"includes": includes, "include_files": include_files}}, 
    executables = [Executable("test.py", base=base)] 
) 

Sie müssen (Benutzername) für Ihre Umgebung ändern.