2016-01-15 11 views
5

मैं अब कुछ दिनों से इस से निपट रहा हूं और कुछ मदद ढूंढने की उम्मीद करता हूं। मैंने आयातित मॉड्यूल tkinter, numpy, scipy, matplotlib के साथ एक जीयूआई एप्लीकेशन विकसित किया, जो कि अजगर में ठीक चलता है। एक * .exe में परिवर्तित होने के बाद सब कुछ अपेक्षित काम करता है, लेकिन matplotlib खंड नहीं। जब मैं अपना परिभाषित साजिश-बटन दबाता हूं, * .exe बस बंद हो जाता है और कोई प्लॉट नहीं दिखाता है। तो मैंने एक साधारण उदाहरण बनाने का विचार किया, जहां मैं बस एक पाप-फ़ंक्शन प्लॉट करता हूं और मुझे एक ही समस्या का सामना करना पड़ रहा है: पाइथन में सही काम करता है, जब इसे * .exe में परिवर्तित करता है तो यह साजिश बटन दबाते समय क्रैश हो जाता है। minimalistic उदाहरण यहाँ है:cx_freeze परिवर्तित GUI-app (tkinter) साजिश दबाकर क्रैश-बटन

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

और cx_freeze साथ परिवर्तित करने के लिए मेरी इसी "setup.py" देखें।

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) 

कोई भी विचार है कि इस मुद्दे को हल कर सकते हैं अत्यधिक सराहना कर रहे हैं। मैं 64-बिट विंडोज 10 मशीन पर काम कर रहा हूं और मैं पायथन 3.4.3 के साथ विनपीथन वितरण का उपयोग कर रहा हूं।

+0

यह जानना दिलचस्प होगा कि यह समस्या विंडोज 10 से संबंधित है, या यदि यह अन्य विंडोज संस्करणों के साथ भी होता है। –

+0

आह, क्षमा करें मैं इसका उल्लेख करना भूल गया। विंडोज 7, 64-बिट मशीन पर एक ही WinPython वितरण के साथ एक ही समस्या खुश है। – PuseMuckeL

+0

बस 32 बिट XP पर कोई समस्या नहीं होने की कोशिश की, मैं इसे 64 बिट win7 पर बाद में –

उत्तर

19

मुझे test.py के साथ PyInstaller का परीक्षण करते समय इस समस्या के लिए संभावित समाधान (या कम से कम एक स्पष्टीकरण) मिला। मुझे एक डीएलएल फ़ाइल गायब होने के बारे में त्रुटि संदेश मिला, वह फ़ाइल mkl_intel_thread.dll है।

मैंने उस फ़ाइल की खोज की और यह numpy फ़ोल्डर के अंदर पाया गया था। मैं MKL _ *। Dll और भी libiomp5md.dll समान निर्देशिका जहां test.exepython setup.py build द्वारा बनाई गई थी मिलान फ़ाइलों की नकल की। इसके बाद न्यूनतम test.exeसाजिश बटन दबाते समय matplotlib विंडो दिखाता है।

फ़ाइलें lib \ site-packages \ numpy \ core फ़ोल्डर में स्थित थीं।

+0

यह अद्भुत दोस्त है। मैंने कई अन्य चीजों की कोशिश की, काम नहीं किया। लेकिन यह मेरे जटिल जीयूआई और साजिश के लिए भी काम करता है। वाह, बहुत बहुत धन्यवाद !!! – PuseMuckeL

+2

मैं एनाकोंडा का उपयोग कर रहा हूं और डीएलएल lib/साइट-पैकेज/numpy/code फ़ोल्डर में नहीं हैं। इसके बजाय मैंने उन्हें एनाकोंडा/लाइब्रेरी/बिन में पाया। –

+0

दुनिया में कैसे आप libiomp5md.dll लेने के लिए जानते थे और कुछ भी नहीं? क्या आप शायद अपनी विचार-प्रक्रिया को उस पर थोड़ा सा साझा कर सकते हैं? अगर मैं भविष्य में इसी तरह की समस्या पर फंस जाऊंगा तो यह मेरी मदद करेगा। यह जवाब मेरे लिए जादू की तरह है। मुझे गंभीरता से नहीं लगता था कि यह काम करने जा रहा था। मेरा कार्यक्रम बहुत जटिल है। लेकिन आपका समाधान सिर्फ सादा काम करता है! – Frikster