I tried via the import and it converts my main app to bytecode (see post on bottom). THANKS FOR THE HELP. However, now I face a strange problem even before I build an app bundle. the mainfile.py runs perfect when launched alone. But when run via main.py it hangs when Upload button is presses. I susspect either wx.callback or the thread- but right now I am lost. NOTE: I use a patched ftplib, so I get a callback from an upload proces, which ftplib by default only supports for download. I include the extra lines I added to ftplib.py.
my main.py looks like this: # /usr/bin/pythonw import mainfile mainfile.py is a small ftp upload app which uses wx.Miniframe and thread ================================================================ # /usr/bin/pythonw #gui elements import wx #os and sys interaction elements import os import sys #ftp elements from ftplib import FTP # Apple XML propertylist parser import plist #str import string # make it threading capable import thread pdffile = None xmlfile = None pofile = "P0.dtreq" #preset to Fo39 fo_choice = "F39" # define where to fnd the necessary config files f = open(os.getcwd() + "/pdffile.txt",'r') for line in f: line = line.rstrip() pdffile = line f.close() xmlfile = os.getcwd() + "/POReq.dtreq" #abort without the necessary files if pdffile is None or xmlfile is None: print "Sorry. Cannot go ahead without PDF-file and XML-file" sys.exit(0) # import and parse the XML property list xmldata = plist.parse_plist(xmlfile) #assign XML values to variables dealer = xmldata['CMS_licDealer'] customer_lastname = xmldata['K_nachname'] customer_firstname = xmldata['K_vorname'] customer_city = xmldata['K_ort'] customer_postal = xmldata['K_plz'] customer_street = xmldata['K_strasse'] customer_email = xmldata['CMS_licName'] serial = xmldata['CMS_licSerial'] dec_email ="[EMAIL PROTECTED]" dec_serial ="123456" # create the GUI Window class Window ( wx.MiniFrame ): def __init__ ( self ): #define default values for upload bar statinfo = os.stat(pdffile) self.filesize = statinfo.st_size self.so_far = 0 #define 4 Fo profiles to choose from fogra_list = ['Fo39','Fo28','Fo29','Fo30'] # No suprises here # We only use a different cl wx.MiniFrame.__init__ ( self, None, -1, 'ftp TEST Transfer',style=wx.DEFAULT_FRAME_STYLE | wx.TINY_CAPTION_HORIZ) # Create a panel self.panel = wx.Panel ( self, -1) self.t1 = wx.StaticText(self.panel,-1," Username:",pos = (10,10)) self.t2 = wx.TextCtrl(self.panel,-1,dec_email,pos = (100,10),size=(135, 15),style=wx.TE_READONLY) self.t3 = wx.StaticText(self.panel,-1," Password:",pos = (10,35)) self.t4 = wx.TextCtrl(self.panel,-1,dec_serial,pos = (100,35),size=(135, 15),style=wx.TE_PASSWORD | wx.TE_READONLY ) self.t5 = wx.StaticText(self.panel,-1," File:",pos = (10,60)) self.t6 = wx.StaticText(self.panel,-1,tail1,pos = (100,60)) self.t7 = wx.StaticText(self.panel,-1," FO:",pos = (10,85)) self.ch = wx.Choice(self.panel, -1, (100, 80), choices = fogra_list) self.panel.Bind(wx.EVT_CHOICE, self.EvtChoice, self.ch) #contruct the gauge for progress display self.g1 = wx.Gauge(self.panel, -1, 100, (10, 110), (230, 25)) self.t9 = wx.StaticText(self.panel, -1, "Kb:", pos = (15,135)) self.t8 = wx.StaticText(self.panel, -1, "Percentt:", pos = (165,135)) #set the go button self.start_upload_button = wx.Button(self.panel, -1, "Upload") self.start_upload_button.SetPosition((15, 165)) self.panel.Bind(wx.EVT_BUTTON, self.OnStartUpload, self.start_upload_button) #set the close button self.close_window_button = wx.Button(self.panel, -1, "Fertig") self.close_window_button.SetPosition((165, 165)) self.panel.Bind(wx.EVT_BUTTON, self.OnCloseMe, self.close_window_button) self.close_window_button.Enable(False) #set fonts - this time individually for later playing self.t1.SetFont(wx.Font(10,wx.SWISS,wx.NORMAL,wx.NORMAL)) self.t2.SetFont(wx.Font(10,wx.SWISS,wx.NORMAL,wx.NORMAL)) self.t3.SetFont(wx.Font(10,wx.SWISS,wx.NORMAL,wx.NORMAL)) self.t4.SetFont(wx.Font(10,wx.SWISS,wx.NORMAL,wx.NORMAL)) self.t5.SetFont(wx.Font(10,wx.SWISS,wx.NORMAL,wx.NORMAL)) self.t6.SetFont(wx.Font(10,wx.SWISS,wx.NORMAL,wx.NORMAL)) self.t7.SetFont(wx.Font(10,wx.SWISS,wx.NORMAL,wx.NORMAL)) self.ch.SetFont(wx.Font(10,wx.SWISS,wx.NORMAL,wx.NORMAL)) self.t8.SetFont(wx.Font(10,wx.SWISS,wx.NORMAL,wx.NORMAL)) self.t9.SetFont(wx.Font(10,wx.SWISS,wx.NORMAL,wx.NORMAL)) #Set Miniframe properties and launch it self.SetSize((250,220)) self.CenterOnParent(wx.BOTH) self.Show(True) def wxcallback(self, buffer): self.so_far = self.so_far+len(buffer)-1 #self.g1.SetValue(self.so_far) #self.g1.Update(self.so_far) pct = float(self.so_far)/self.filesize*100 self.g1.SetValue(pct) pct2 = round(pct, 2) self.t8.SetLabel("Prozent: " + str(pct2)) self.t9.SetLabel("Kb: " + str(self.so_far) + " von " + str(self.filesize)) #print "so far:", self.so_far, pct return def EvtChoice(self,event): global fo_choice fo_choice=event.GetString() def OnCloseMe(self,evt): self.Close(True) def OnStartUpload(self,evt): thread.start_new(self.FtpUp,()) def FtpUp(self): #start pulsing the gauge self.g1.Pulse() #disable the Upload button self.start_upload_button.Enable(False) #the progress dialog #connect to the ftp server ftp = FTP("192.168.0.1") ftp.login("username", "password") trans_file = open(pdffile) print trans_file #FTPprogress = FTPProgressDialog(filename) ftp.newstorbinary("STOR " + serial + "_" + fo_choice + "_" + tail1, trans_file, callback=self.wxcallback) trans_file.close() ftp.close() #set gauge to 100% caus it hangs at 99.9% although 100% self.g1.SetValue(230) self.t8.SetLabel("Percent: 100.00") self.t9.SetLabel("Kb: " + str(self.filesize) + " of " + str(self.filesize)) #let the user press Finish to close the window self.close_window_button.SetForegroundColour("green") self.close_window_button.Enable() application = wx.PySimpleApp() Window() application.MainLoop() ================================================================ patch for ftplib.py to support a callback for uploads: Append to your ftplib.py: =========================================================== def newstorbinary(self, cmd, fp, blocksize=8192, callback = None):#this version includeds a callback '''Store a file in binary mode.''' #CRLF = ftplib.CRLF self.voidcmd('TYPE I') conn = self.transfercmd(cmd) while 1: buf = fp.read(blocksize) if not buf: break conn.sendall(buf) if callback: callback(buf) conn.close() return self.voidresp() ================================================ --- On Tue, 8/5/08, Mike Covill <[EMAIL PROTECTED]> wrote: > From: Mike Covill <[EMAIL PROTECTED]> > Subject: Re: [Pythonmac-SIG] py2app- python code packed in clear ascii > To: [EMAIL PROTECTED] > Cc: pythonmac-sig@python.org > Date: Tuesday, August 5, 2008, 2:08 PM > the shelter, > > The last time I built an app bundle, the only source file > from my code in plain ascii was my main.py file. Everything > else was precompiled and zipped up in a sub-folder. So the > strategy to hide all source code was to create a main.py > file which simply imports another file containing what used > to be in the main.py file, and run it from there. > > Here are some py2app resources I found useful: > > http://svn.pythonmac.org/py2app/py2app/trunk/doc/index.html > http://undefined.org/python/py2app.html > > Mike > > > On 4-Aug-08, at 12:45 PM, the Shelter wrote: > > > Hi, > > > > after a lot of python programming on linux and windows > I have now taken up the task of converting/ adapting my apps > (python/wxPython) to the mac. > > I tried to bundle my apps w/ py2app but had to find > out that it seems like it packs my sources in clear ascii > and not in binary form- somewhat unusual after having worked > w/ py2exe ... > > > > Am I missing something? > > > > Right now I am on 10.4 w/ latest python and py2app- > all from python.org- not the Apple versions. > > > > thanX > > > > > > > > _______________________________________________ > > Pythonmac-SIG maillist - Pythonmac-SIG@python.org > > http://mail.python.org/mailman/listinfo/pythonmac-sig _______________________________________________ Pythonmac-SIG maillist - Pythonmac-SIG@python.org http://mail.python.org/mailman/listinfo/pythonmac-sig