2016-05-08 16 views
5

Ho creato un'app Python (2.7) che utilizza Tkinter e sto provando a creare un exe di Windows7 usando Pyinstaller (3.2). Le opere app trovano in Windows è l'eseguo come python myapp.py, ma una volta compilato in un distribuibile pyinstaller, ottengo questo messaggio di errore:pyinstaller e Tkinter

ImportError: No module named Tkinter 

Giusto per essere sicuri, la parte superiore di myapp.py contiene:

from copy import deepcopy 
import cPickle as pickle 
import Tkinter as tk 
from PIL import ImageTk 

Controllo della directory di distribuzione, vedo tk85.dll, tcl85.dll e due directory che vedono pertinenti, tcl/tk e/

ho trovato molti riferimenti a dipendenze Tkinter secondari, come matplotlib che le importazioni Tkinter itslef, ma non l'ho fatto trovato qualche dettaglio di una dipendenza diretta come questa.

Qualche idea su come farlo funzionare?

+0

Ho convertito uno script Python in exe ma ho trovato PyInstaller che creava problemi. Prova invece a farlo usando Cx_Freeze. È senza problemi e funziona come un fascino. – AR06

+0

Non lo so. Farò un tentativo e riferire una volta che faccio. – KirkDCO

+0

Ho provato cx_Freeze e sono molto più vicino. Ho dovuto inserire un paio di eccezioni per evitare alcuni errori del pacchetto. Ora, tuttavia, sono bloccato con un problema di carattere. Uno dei pacchetti che sto usando utilizza anche Pillow e alcuni font PIL. Ho trovato dove sono memorizzati i caratteri per il pacchetto, ma non riesco a mettere a punto le cose per sapere che ci sono. Li ho copiati direttamente nella directory build/exe, ma senza fortuna. Vedo anche la sezione nei documenti cx_Freeze sull'inclusione dei file di dati, ma non sono sicuro di come farlo funzionare. – KirkDCO

risposta

0

Avete controllato: https://github.com/pyinstaller/pyinstaller/issues/1877 (o altri problemi)? https://github.com/pyinstaller/pyinstaller/wiki/If-Things-Go-Wrong

citazione dal numero 1877 "Sembra che il hook-_tkinter.py non sia in grado di gestire Tk compilato personalizzato." Possibile soluzione: "Grazie, dopo aver installato tkinter, tix, tcl-devel e tk-devel usando l'installazione yum, ora funziona bene."

In alternativa, Py2exe è anche un'opzione per creare un file .exe, e io l'ho usato molte volte con tkinter senza problemi.

+0

Non l'ho visto. Non sto usando una build personalizzata, ma cercherò di installare i pacchetti aggiuntivi. Farò un tentativo e riportare qui – KirkDCO

+0

Sfortunatamente, ho scoperto che ho già tutti questi pacchetti installati. – KirkDCO

+0

Ho anche provato py2exe e ho scoperto che dovevo aggiungere alcune DLL escluse (numpy-atlas.dll e MSVCP90.dll). Una volta compilato, fallisce con un numero di voci di registro che dicono "ImportError: numpy.core.multiarray non è riuscito a importare" Ho cercato soluzioni ma non ho trovato alcuna soluzione. – KirkDCO

2

Controllare https://github.com/pyinstaller/pyinstaller/issues/1584. C'è un problema con il gancio PIL, che esclude il modulo tkinter.

Una soluzione consiste nel modificare il file di hook-PIL.py gancio posto in YourPythonFolder \ Lib \ site-packages \ PyInstaller \ ganci rimuovendo il modname_tkinter da excludedimports.

O semplicemente modificare l'ordine delle istruzioni di importazione nel codice. Do:

from PIL import ImageTk 
import Tkinter as tk 
+0

Bella soluzione. Ricorda che cambiare l'ordine di importazione non funziona usando 'da Tkinter import *', ma questo può essere risolto facilmente come fatto sopra. – tfv