2016-01-15 12 views
5

Ho avuto a che fare con questo per giorni e ora spero di trovare qualche aiuto. Ho sviluppato un'applicazione GUI con moduli importati tkinter, numpy, scipy, matplotlib, che funziona bene in Python stesso. Dopo aver convertito in un file * .exe, tutto funziona come previsto, ma NON la sezione matplotlib. Quando premo il mio pulsante-plot definito, * .exe si chiude semplicemente e non mostra alcun grafico. Quindi ho pensato di fare un esempio minimalista, in cui ho semplicemente tracciato una funzione sin e sto affrontando lo stesso problema: Funziona perfettamente in python, quando lo converti in un file * .exe si blocca quando si preme il pulsante di stampa. L'esempio minimalista è qui:cx_freeze convertita GUI-app (tkinter) si blocca dopo aver premuto il pulsante di trama

import tkinter as tk 
import matplotlib.pyplot as plt 
import numpy as np 

class MainWindow(tk.Frame): 
    def __init__(self): 
     tk.Frame.__init__(self,bg='#9C9C9C',relief="flat", bd=10) 
     self.place(width=x,height=y) 
     self.create_widgets() 

    def function(self): 
     datax = np.arange(-50,50,0.1) 
     datay = np.sin(datax) 
     plt.plot(datax,datay) 
     plt.show() 

    def create_widgets(self): 
     plot = tk.Button(self, text='PLOT', command=self.function) 
     plot.pack() 


x,y=120,300 
root=tk.Tk() 
root.geometry(str(x)+"x"+str(y)) 
app = MainWindow() 
app.mainloop() 

E vedere il mio corrispondente "setup.py" per la conversione con cx_freeze.

import cx_Freeze 
import matplotlib 
import sys 
import numpy 
import tkinter 

base = None 

if sys.platform == "win32": 
    base = "Win32GUI" 

executables = [cx_Freeze.Executable("test.py", base=base)] 


build_exe_options = {"includes": ["matplotlib.backends.backend_tkagg","matplotlib.pyplot", 
          "tkinter.filedialog","numpy"], 
        "include_files":[(matplotlib.get_data_path(), "mpl-data")], 
        "excludes":[], 
        } 

cx_Freeze.setup(
    name = "test it", 
    options = {"build_exe": build_exe_options}, 
    version = "1.0", 
    description = "I test it", 
    executables = executables) 

Tutte le idee che potrebbero risolvere il problema sono molto apprezzate. Sto lavorando su una macchina Windows10 a 64 bit e sto usando la distribuzione WinPython con Python 3.4.3.

+0

Sarebbe interessante sapere se questo problema riguarda Windows 10 o se lo stesso accade con altre versioni di Windows. –

+0

Ah, scusa, ho dimenticato di dirlo. Lo stesso problema è accaduto con la stessa distribuzione di WinPython su un computer con Windows 7 a 64 bit. – PuseMuckeL

+0

Ho appena provato questo su XP a 32 bit senza problemi, lo proverò su 64 bit Win7 in seguito –

risposta

19

Ho trovato una soluzione potenziale (o almeno una spiegazione) per questo problema durante il test di PyInstaller con lo stesso test.py. Ho ricevuto un messaggio di errore su un file dll mancante, il cui file è mkl_intel_thread.dll.

Ho cercato quel file ed è stato trovato all'interno della cartella numpy. Ho copiato i file che corrispondono mkl _ *. Dll e anche libiomp5md.dll nella stessa directory in cui il test.exe creato da python setup.py build era. Dopo questo il minimo test.exe ha mostrato la finestra matplotlib quando si preme il pulsante plot.

I file si trovavano nella cartella lib \ site-packages \ numpy \ core.

+0

Questo è un tipo eccezionale. Ho provato tante altre cose che, non ha funzionato. Ma funziona anche per la mia interfaccia grafica più complessa e per la trama. Wow, grazie mille !!! – PuseMuckeL

+2

Sto usando Anaconda e le DLL non si trovano nella cartella lib/site-packages/numpy/code. Invece li ho trovati in Anaconda/Library/bin. –

+0

Come mai sapevi che prendevi libiomp5md.dll e non qualcos'altro? Puoi condividere il tuo pensiero-processo un po 'su questo? Mi aiuterà se rimango bloccato su un problema simile in futuro. Questa risposta è per me magica. Non pensavo seriamente che avrebbe funzionato. Il mio programma è piuttosto complesso. Ma la tua soluzione funziona semplicemente! – Frikster

Problemi correlati