2016-01-15 40 views
5

Günlerdir bununla uğraşıyordum ve bazı yardımlar yapabilmeyi umuyoruz. Ben python kendisi iyi çalışır ithal modülleri tkinter, numpy, scipy, matplotlib ile bir GUI-uygulama geliştirdi. Bir .exe'e dönüştürüldükten sonra her şey beklendiği gibi çalışır, ancak matplotlib bölümü DEĞİL. Tanımladığım çizim-düğmesine bastığımda, * .exe sadece kapanır ve herhangi bir grafik göstermez. Minimalist bir örnek oluşturmayı düşündüm, sadece bir günah işleyişini çizdiğim ve aynı sorunla karşı karşıya olduğumu düşündüm: Python'da mükemmel çalışıyor, bir * exe dosyasına dönüştürüldüğünde arsa düğmesine basıldığında çöküyor.cx_freeze dönüştürülen GUI-app (tkinter) ardı ardına bastıktan sonra çöküyor-Düğme

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() 

Ve cx_freeze ile dönüştürmek için benim buna karşılık gelen "setup.py" bakın: minimalist örnek burada.

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) 

Sorunu çözebilecek herhangi bir fikir büyük beğeni topluyor. 64 bit Windows10 makinede çalışıyorum ve Python 3.4.3 ile WinPython Dağıtımını kullanıyorum.

+0

Bu sorunun Windows 10 ile ilgili olup olmadığını veya diğer Windows sürümleriyle aynı olup olmadığını bilmek ilginç olabilir. –

+0

Ah, üzgünüm, bahsetmeyi unuttum. Aynı sorun, Windows 7, 64 bit makinede aynı WinPython Dağıtımı ile gerçekleşir. – PuseMuckeL

+0

Sadece 32 bit XP'de hiç sorun yaşamadan denedim, 64 bit win7'de deneyeceğim. –

cevap

19

PyInstaller'ı aynı test.py ile test ederken bu sorun için olası bir çözüm (veya en azından bir açıklama) buldum. Eksik olan bir dll dosyasıyla ilgili hata mesajı aldım, bu dosya mkl_intel_thread.dll.

Bu dosya için arandı ve numpy klasöründe bulunamadı. Ben MKL _ *. Dll ve python setup.py build yarattığı test.exe oldu aynı dizine de libiomp5md.dll eşleşen dosyaları kopyaladı. Bundan sonra en az test.exe, çizim düğmesine basarken matplotlib penceresini gösterdi.

Dosyalar, lib \ site-packages \ numpy \ core klasöründe bulunuyordu.

+0

Bu harika bir ahbap. O kadar çok şeyi denedim, işe yaramadı. Ama bu benim karmaşık GUI ve komplo için bile çalışır. Vay, çok teşekkürler! – PuseMuckeL

+2

Anaconda kullanıyorum ve DLL dosyaları lib/site-packages/numpy/code klasöründe değil. Bunun yerine onları Anaconda/Library/bin'de buldum. –

+0

Dünyada nasıl libiomp5md.dll alıp başka bir şey almayı biliyor muydunuz? Düşünce sürecini biraz üzerinde paylaşır mısın? Gelecekte benzer bir problemde sıkışıp kalırsam bana yardımcı olur. Bu cevap bana sihir gibi geliyor. Cidden işe yarayacağını düşünmedim. Programım oldukça karmaşık. Ama çözümün sadece sade işler! – Frikster