2011-02-04 14 views
7
साथ

मैं py2exe-0.6.9.win32 उपयोग करने के लिए जुड़े डाउनलोड फ़ाइल नाम के साथ निम्न वस्तु लाइब्रेरी का उपयोग कर एक आवेदन है कि मैं Python2.6.5 में लिखा है लपेट के लिए कोशिश कर रहा हूँ:py2exe और नहीं मिल रहा Numpy

matplotlib -0.99.3.win32

numpy-1.4.1-win32

scipy-0.8.0b1-Win32

wxPython2.8-Win32-यूनिकोड-2.8.11.0

जब मैं परिणामी .exe फ़ाइल लॉन्च करने का प्रयास करता हूं तो मुझे त्रुटि संदेश मिल रहा है। फिलहाल, त्रुटि संदेश numpy से संबंधित है, हालांकि इससे पहले कि मैं matplot lib डेटा फ़ाइलों से संबंधित कुछ प्राप्त कर रहा था लोड नहीं कर रहा था और इस प्रकार मेरी exe फ़ाइल के लॉन्च को अवरुद्ध कर रहा था।

कोड की एक मील और सभी त्रुटि संदेशों को पोस्ट करने के बजाय, मैं एक और सामान्य प्रश्न पोस्ट कर रहा हूं: क्या कोई मुझे इन ऑब्जेक्ट लाइब्रेरीज़ और संस्करणों को काम करने के लिए py2exe का उपयोग करके एक साथ अच्छी तरह से खेलने के लिए कुछ निर्देश दिखा सकता है exe फ़ाइल?

मैं ऐसी चीजें पढ़ रहा हूं जो विषय पर Google खोजों के साथ आते हैं, लेकिन ऐसा लगता है कि हर कोई एक जंगली हंस का पीछा करता है जिसमें हर कोई अलग-अलग चीजों के विभिन्न संस्करणों का उपयोग कर रहा है। मैं इनमें से कुछ ऑब्जेक्ट लाइब्रेरीज़ के कुछ संस्करणों को बदल सकता हूं यदि इससे कोई फर्क पड़ता है, लेकिन मैंने इस सिग्नल प्रोसेसिंग एप्लिकेशन में कोड की 5000 लाइनें पहले ही लिखी हैं, और मैं इसे सब फिर से लिखना नहीं चाहूंगा, अगर मुमकिन।


संपादित करें:

यहाँ GUIdiagnostics.py नामक एक फ़ाइल में अपने कोड का एक सरलीकृत संस्करण है कि मैं अपने py2exe स्क्रिप्ट की क्षमता सभी पुस्तकालयों है कि मैं में आवश्यकता आयात करने के लिए परीक्षण करने के लिए किया जाता है मेरा असली आवेदन:

:

import time 
import wxversion 
import wx 
import csv 
import os 
import pylab as p 
from scipy import stats 
import math 
from matplotlib import * 
from numpy import * 
from pylab import * 
import scipy.signal as signal 
import scipy.optimize 
import Tkinter 

ID_EXIT = 130 

class MainWindow(wx.Frame): 
    def __init__(self, parent,id,title): 
     wx.Frame.__init__(self,parent,wx.ID_ANY,title, size = (500,500), style =  wx.DEFAULT_FRAME_STYLE | wx.NO_FULL_REPAINT_ON_RESIZE) 

     # A button 
     self.button =wx.Button(self, label="Click Here", pos=(160, 120)) 
     self.Bind(wx.EVT_BUTTON,self.OnClick,self.button) 

     # the combobox Control 
     self.sampleList = ['first','second','third'] 
     self.lblhear = wx.StaticText(self, label="Choose TestID to filter:", pos=(20, 75)) 
     self.edithear = wx.ComboBox(self, pos=(160, 75), size=(95, -1),  choices=self.sampleList, style=wx.CB_DROPDOWN) 

     # the progress bar 
     self.progressMax = 3 
     self.count = 0 
     self.newStep='step '+str(self.count) 
     self.dialog = None 

     #-------Setting up the menu. 
     # create a new instance of the wx.Menu() object 
     filemenu = wx.Menu() 

     # enables user to exit the program gracefully 
     filemenu.Append(ID_EXIT, "E&xit", "Terminate the program") 

     #------- Creating the menu. 
     # create a new instance of the wx.MenuBar() object 
     menubar = wx.MenuBar() 
     # add our filemenu as the first thing on this menu bar 
     menubar.Append(filemenu,"&File") 
     # set the menubar we just created as the MenuBar for this frame 
     self.SetMenuBar(menubar) 
     #----- Setting menu event handler 
     wx.EVT_MENU(self,ID_EXIT,self.OnExit) 

     self.Show(True) 

    def OnExit(self,event): 
     self.Close(True) 

    def OnClick(self,event): 
     try: 
      if not self.dialog: 
       self.dialog = wx.ProgressDialog("Progress in processing your data.", self.newStep, 
              self.progressMax, 
              style=wx.PD_CAN_ABORT 
              | wx.PD_APP_MODAL 
              | wx.PD_SMOOTH) 
      self.count += 1 
      self.newStep='Start' 
      (keepGoing, skip) = self.dialog.Update(self.count,self.newStep) 
      TestID = self.edithear.GetValue() 

      self.count += 1 
      self.newStep='Continue.' 
      (keepGoing, skip) = self.dialog.Update(self.count,self.newStep) 
      myObject=myClass(TestID) 
      print myObject.description 

      self.count += 1 
      self.newStep='Finished.' 
      (keepGoing, skip) = self.dialog.Update(self.count,self.newStep) 

      self.count = 0 

      self.dialog.Destroy() 

     except: 
      self.dialog.Destroy() 
      import sys, traceback 
      xc = traceback.format_exception(*sys.exc_info()) 
      d = wx.MessageDialog(self, ''.join(xc),"Error",wx.OK) 
      d.ShowModal() # Show it 
      d.Destroy() #finally destroy it when finished 

class myClass(): 
    def __init__(self,TestID): 
     self.description = 'The variable name is: '+str(TestID)+'. ' 

app = wx.PySimpleApp() 
frame = MainWindow(None,-1,"My GUI") 
app.MainLoop() 

यहाँ setup.py के लिए कोड है, जो मेरी py2exe कोड युक्त फ़ाइल है

मैं खिड़कियों के कमांड लाइन इंटरफेस (cmd.exe) में निम्न पंक्ति टाइप करके इस कोड को चलाने के नीचे दिए गए लिंक के अनुसार:

setup.py py2exe 

Py2exe तो चलाता है, लेकिन जब मैं जिसके परिणामस्वरूप शुरू करने की कोशिश

Traceback (most recent call last): 
    File "setup.py", line 6, in <module> 
    File "zipextimporter.pyo", line 82, in load_module 
    File "pylab.pyo", line 1, in <module> 
    File "zipextimporter.pyo", line 82, in load_module 
    File "matplotlib\pylab.pyo", line 206, in <module> 
    File "zipextimporter.pyo", line 82, in load_module 
    File "matplotlib\mpl.pyo", line 3, in <module> 
    File "zipextimporter.pyo", line 82, in load_module 
    File "matplotlib\axes.pyo", line 14, in <module> 
    File "zipextimporter.pyo", line 82, in load_module 
    File "matplotlib\collections.pyo", line 21, in <module> 
    File "zipextimporter.pyo", line 82, in load_module 
    File "matplotlib\backend_bases.pyo", line 32, in <module> 
    File "zipextimporter.pyo", line 82, in load_module 
    File "matplotlib\widgets.pyo", line 12, in <module> 
    File "zipextimporter.pyo", line 82, in load_module 
    File "matplotlib\mlab.pyo", line 388, in <module> 
TypeError: unsupported operand type(s) for %: 'NoneType' and 'dict' 

किसी को भी मुझे दिखा सकते हैं कि कैसे setup.py संपादित करने के लिए इतना है कि py2exe एक प्रयोग करने योग्य निष्पादन योग्य चल numpy, scipy, matplotlib, आदि बना सकते हैं: exe फ़ाइल, यह एक लॉग फ़ाइल निम्न संदेश युक्त बनाता है?


दूसरा संपादित करें:

ठीक है। मैंने आज आरसी की सलाह फिर से कोशिश की कि मेरे पास इसके लिए एक नया दिमाग है, और मुझे एक ही त्रुटि मिली है, लेकिन मैं इसे नीचे शामिल कर रहा हूं। यहां cxsetup.py नामक फ़ाइल के लिए कोड है जिसे मैंने टेम्पलेट के बाद बनाया है: http://cx-freeze.sourceforge.net/cx_Freeze.html

ImportError: No module named cx_Freeze 

निर्देशिका में:

python cxsetup.py build 

कमांड लाइन में निम्न त्रुटि उत्पन्न करता है:

from cx_Freeze import setup, Executable 

setup(
     name = "Potark", 
     version = "0.1", 
     description = "My application.", 
     executables = [Executable("Potark-ICG.py")]) 

दुर्भाग्य से, कमांड लाइन (cmd.exe) कमांड के साथ में यह चल रहा है कमांड लाइन मेरे एप्लिकेशन के लिए निर्देशिका है, जो डेस्कटॉप के उपफोल्डर में है। यह अजगर अनुप्रयोग के लिए निर्देशिका से अलग है, लेकिन मुझे लगता है कि cmd.exe इसे समझ सकता है क्योंकि पाइथन इसे समझ सकता है। क्या मैं गलत हूँ? एक परीक्षण के रूप में, मैं cxsetup.py की पहली पंक्ति के लिए कोड की निम्न पंक्ति कहा:

import matplotlib 

लेकिन वह लगभग समान त्रुटि उत्पन्न:

ImportError: No module named matplotlib 

मैं इस सूत्र रखने की कोशिश की है केंद्रित और छोटा, लेकिन यह बहुत लंबा हो रहा है। क्या कोई इस से मेरी सहायता कर सकता है? http://www.py2exe.org/index.cgi/MatPlotLib

लगता है: मैं स्विचन के सभी काम करने के लिए केवल cx_freeze को खोजने के लिए है कि यह numpy, matplotlib, scipy, आदि के साथ काम नहीं कर सकता

+0

शायद आप सीएक्सफ़्रीज़ के साथ प्रयास कर सकते हैं और देख सकते हैं कि यह एक काम कर रहे exe –

+0

(हटाए गए क्षमा करें) –

+0

धन्यवाद करने में मदद करता है। मैंने कोशिश की, लेकिन मुझे सीएक्सफ्रीज़ से एक अलग त्रुटि संदेश मिल रहा है और मैं इस थ्रेड को ध्यान में रखना पसंद करूंगा ताकि मैं लोगों को बहुत अधिक कोड या बहुत से त्रुटि संदेशों से भ्रमित न करूं। प्रोग्रामिंग का यह पहलू मेरे लिए नया है। – MedicalMath

उत्तर

2

समस्या इस के तल पर उल्लेख की तरह लगता है नहीं चाहते जैसे आप बनाने की जरूरत है कुछ छोटे परिवर्तन mlab.py रहे हैं:

psd.__doc__ = psd.__doc__ % kwdocd 

if psd.__doc__ is not None: 
    psd.__doc__ = psd.__doc__ % kwdocd 
else: 
    psd.__doc__ = "" 

करने के लिए आप यह नहीं देखा है पेज पहले से ही यह है कि मैं वहां कैसे गया: http://www.py2exe.org/index.cgi/WorkingWithVariousPackagesAndModules

0

जैसा कि अन्य ने उल्लेख किया है, py2exe को केस-दर-मामले आधार पर बदसूरत, यादृच्छिक सुधार की आवश्यकता होती है ... ऐसा लगता है कि इसके आसपास कोई रास्ता नहीं है। साथ ही, कुछ त्रुटियां दूर जाने से इनकार करती हैं, और प्रोग्राम को प्रभावित नहीं करती हैं, लेकिन प्रोग्राम को उपयोगकर्ता को सूचित करने का कारण बनता है कि बाहर निकलने के बाद त्रुटियों का लॉग बनाया गया था। कि बचने के लिए, मैं इस कोड का उपयोग करें:

import sys 
IS_USING_PY2EXE = hasattr(sys, "frozen") 

# Redirect output to a file if this program is compiled.  
if IS_USING_PY2EXE: 
    # Redirect log to a file. 
    LOG_FILENAME = os.path.join(logDir, "myfile.log") 
    print('Redirecting Stderr... to %s' % LOG_FILENAME) 
    logFile = open(os.path.join(LOG_FILENAME),"w") # a --> append, "w" --> write 

    sys.stderr = logFile 
    sys.stdout = logFile 
0

यह सिर्फ मुझे बेवकूफ किया जा रहा है हो सकता है, लेकिन आप क्यों 0.8.0 के लिए 0.8.0b1 से अपने scipy को अद्यतन करने और matplotlib साथ भी ऐसा ही करने की कोशिश न? बेवकूफ 1.4.1 अभी भी ठीक होना चाहिए।

संबंधित मुद्दे