PDA

Visualizza la versione completa : Eseguibile In Python Per Windows


Barabba83
05-02-2010, 17:43
Ciao a tutti...
Ho scritto un programma in Python e devo renderlo un eseguibile per Windows.
Sto utilizzando la py2exe pero'm quando provo a creare l'eseguibile mi compare questa scritta :

copying C:\Python26\lib\site-packages\py2exe\run.exe -> C:\Python26\dist\e.exe
The following modules appear to be missing
['_scproxy', 'hexdump']

Credo che volgia dire che non trava quei 2 moduli.
Ma io non so neache di che si trattano.

Inoltre quando eseguo il programma sul mio pc tramiter Python va benissimo...se lo eseguo digitando da riga di comando "programma.py", me lo apre, ma il programma va lentissimo.

Forse in realta' il problema è lo stesso...

GRazie in anticipo a tutti.

deleted_26
06-02-2010, 19:51
Per quanto riguarda il fatto di andare più lento se chiamato in un modo, non saprei.

Per quanto riguarda py2exe: il modulo hexdump non fa parte di quelli standard di python quindi o fa parte di py2exe (in quel caso dovrebbe bastare re-installare py2exe) oppure viene importato da qualche altro modulo usato nel tuo programma.

Ma dall'errore che ti dà penso sia parte di py2exe. Prova a disinstallarlo e reinstallarlo.

Barabba83
07-02-2010, 18:04
Non è che chiamandoli con nomi diversi mi funzionano in modo diverso.
Solo che se faccio partire lo script in ambiante Python ( aprendo Python e poi cliccando su "run") va tutto bene.
Se invece clicco due volte sul file Programma.py, mi si apre il programma ma non fa quello che dico...

Che potrebbe essere???

deleted_26
07-02-2010, 18:21
visto che, a tuo dire, si comporta in modo diverso a seconda di come lo esegui penso che sarebbe utile postare un po' di codice...

Hai risolto con py2exe, invece?

Barabba83
07-02-2010, 21:54
No...ho provato a reinstallarlo ma mi da sempre lo stesso errore.

Il problema e' che dentro al programma ho 3 cicli while uno dentro l altro con un istruzione time.sleep() all interno...eliminando i cicli il problema non c'e' piu'...

Potrei aver appesantito troppo il programma?

deleted_26
08-02-2010, 11:06
Sicuramente mettere più cicli while uno dentro l'altro non è una buona idea.
Non è che potresti postare la parte di codice con i while

Barabba83
08-02-2010, 12:56
I cicli while mi servono a creacre un cronometro visibile nell interfaccia (ore:min:secondi).

Ecco la parte con i while:

while gio-1<giorni:
o=0
while o-1<ore:
m=0
while m-1<minuti:
s=0

while s-1<secondi:
d=0

self.Label4 = Label(self.quadro_destra, text= (gio,':',o,':',m,':',s))
self.Label4.place(x=230, y=90)
self.Label4.configure(width=18,heigh=4,
background="green",font=40)

################################################## ############
while d-1<decimi:
##############
if chiudi==1:
break
##############
nc=' '
cor=' '
vel=' '
pos=' '

print gio,":",o,":",m,":",s,":",d

giostr=str(gio)
orestr=str(o)
minstr=str(m)
secstr=str(s)
decstr=str(d)
##################
time.sleep(0.062)
##################

## Ricezione dalla seirale ##

while se.inWaiting()>0:

nc +=se.read()

se.write('iq\r')

se.write('vx\r')

se.write('px\r')

se.write('nc\r')


print str(nc)
print str(cor)
print str(vel)
print str(pos)

if ric==ricf: ## registro su file solo quando voglio e per un minuto

text_filed.write(giostr+':'+orestr+':'+minstr+':'+ secstr +':'+ decstr+' -- - '+str(nc)+' '+str(delta)+'\n'+'\n')

drec=drec+1
print drec

if drec==drecf*600: ## imposto la durata della registrazione

ric=-1
drec=0
###

if s>1:

a1=(nc[4:5])
a2=(nc[5:6])
a3=(nc[6:7])
a4=(nc[7:8])

anacor=float(a1+a2+a3)
anacor2=float(a1+a2+a3+a4)
############################
### registro i max e min ###
############################

if anacor2<cmin:
cmin=anacor2

if anacor2>cmax:
cmax=anacor

delta=((cmax)+(cmin))/2

print cmax
print cmin
print delta

if abs(delta)<1.5:
##############
if chiudi==1:
break
##############
self.label35 = Label(self.quadro_basso, text='DELTA INFERIORE A 1.5 AMP\nDELTA= '+str(delta)+'\n'+str(cmin)+' --- '+str(cmax),
background = "green",foreground='blue',font=40)
self.label35.place(x=360, y=90)
self.label35.configure(width=36,heigh=6)

elif abs(delta)>1.5 and abs(delta)<2.5:
##############
if chiudi==1:
break
##############
self.label35 = Label(self.quadro_basso, text='DELTA SUPERIORE A 1.5 AMP\nMA INFERIORE A 2.5 AMP\nDELTA= '+str(delta)+'\n'+str(cmin)+' --- '+str(cmax),
background = "yellow",foreground='blue',font=40)
self.label35.place(x=360, y=90)
self.label35.configure(width=36,heigh=6)

elif abs(delta)>3.0:
##############
if chiudi==1:
break
##############
self.label35 = Label(self.quadro_basso, text='DELTA SUPERIORE A 3.0 AMP\nDELTA= '+str(delta)+'\n'+str(cmin)+' --- '+str(cmax),
background = "red",foreground='blue',font=40)
self.label35.place(x=360, y=90)
self.label35.configure(width=36,heigh=6)

chiudit=1 ## con questo esco dal ciclo !
############################
############################
############################

if abs(anacor)<float(3.5):

##############
if chiudi==1:
break
##############

self.label30 = Label(self.quadro_basso, text='CORRENTE INFERIORE A 3.5 AMP\n',
background = "green",foreground='blue',font=40)
self.label30.place(x=20, y=90)
self.label30.configure(width=36,heigh=6)

elif abs(anacor)>float(3.5) and abs(anacor)<float(4.0):

##############
if chiudi==1:
break
##############

self.label30 = Label(self.quadro_basso, text='CORRENTE SUPERIORE A 3.5 AMP\nINFERIORE A 4.0 AMP',
background = "yellow",foreground='blue',font=40)
self.label30.place(x=20, y=90)
self.label30.configure(width=36,heigh=6)

elif abs(anacor)>float(4.0) and abs(anacor)<float(4.5):

##############
if chiudi==1:
break
##############

self.label30 = Label(self.quadro_basso, text='CORRENTE SUPERIORE A 4.0 AMP\nCOLLAUDO A RISCHIO',
background = "red",foreground='blue',font=40)
self.label30.place(x=20, y=90)
self.label30.configure(width=36,heigh=6)

elif abs(anacor)>float(5.0):

se.write('kl\n')

while se.outWaiting():
se.close()

chiudit=1

self.label30 = Label(self.quadro_basso, text='CORRENTE SUPERIORE A 5.0 AMP\nCOLLAUDO TERMINATO a '+str(gio)+':'+str(o)+':'+str(m)+':'+str(s)+'\nCON ESITO NEAGITVO\n',
background = "black",foreground='white',font=40)
self.label30.place(x=20, y=75)
self.label30.configure(width=36,heigh=7)

text_filed.write('\n------ COLLAUDO NEGATIVO -----\n----- LIMITE DI CORRENTE SUPERATO -----')

break

################################################## ##############

d=d+2

##############
if chiudi==1:
break
##############
##############
if chiudit==1:
break
##############

if abs(anacor2)!=0:

self.label5 = Label(self.quadro_destra, text=(nc[4:10]))
self.label5.place(x=230, y=155)
self.label5.configure(width=18,heigh=3,background="green",font=1)

self.label6 = Label(self.quadro_destra, text=(nc[16:21]))
self.label6.place(x=230, y=215)
self.label6.configure(width=18,heigh=3,background="green",font=1)

self.label7 = Label(self.quadro_destra, text=(nc[24:30]))
self.label7.place(x=230, y=275)
self.label7.configure(width=18,heigh=3,background="green",font=1)

self.label8 = Label(self.quadro_destra, text=(nc[33:]))
self.label8.place(x=230, y=330)
self.label8.configure(width=18,heigh=3,background="green",font=1)

self.label30 = Label(self.quadro_basso, text='CORRENTE A 0.0 AMP',
background = "white",foreground='blue',font=40)
self.label30.place(x=20, y=90)
self.label30.configure(width=36,heigh=6)


elif abs(anacor) == float(0.0):

self.label5 = Label(self.quadro_destra, text=(' '))
self.label5.place(x=230, y=155)
self.label5.configure(width=18,heigh=3,background="green",font=1)

self.label6 = Label(self.quadro_destra, text=(' '))
self.label6.place(x=230, y=215)
self.label6.configure(width=18,heigh=3,background="green",font=1)

self.label7 = Label(self.quadro_destra, text=(' '))
self.label7.place(x=230, y=275)
self.label7.configure(width=18,heigh=3,background="green",font=1)

self.label8 = Label(self.quadro_destra, text=(' '))
self.label8.place(x=230, y=330)
self.label8.configure(width=18,heigh=3,background="green",font=1)

################################################
s=s+1

##############
if chiudi==1:
break
##############
##############
if chiudit==1:
break
##############

ric=ric+1
m=m+1
##############
o=o+1
##############
if chiudi==1:
break
##############
##############
if chiudit==1:
break
##############
gio=gio+1
##############
if chiudi==1:
break
##############
##############
if chiudit==1:
break
##############

##chiudo i file alla fine del collaudo

text_filed.close()

## mando lo stop(kl)alla seirale
se.write('kl\n')
print 'stop'

deleted_26
08-02-2010, 14:00
Stai usando una qualche GUI?

Prova a fare Start>Esegui...>(digita cmd.exe)>(ti si apre il terminale)>C:\Python26\python.exe C:\Qualcosa\Programma.py

Così funziona?

E comunque: esattamente cosa succede quando clicchi due volte sul file py?
E poi: stai usando delle classi?

Barabba83
08-02-2010, 14:51
Sto usando Tkinter.
Il tutto è dentro una classe con cui ho creato l interfaccia.

Il programma dovrebbe visualizzare un cronometro,in cui il tempo scorre e ogni 2 decimi di secondo acquisisce dati dalla seriale e li registra su un file.
Il fatto e' che la comunicazione con la seriale e' perfetta, e i risultati sono registrati bene sul file.
Pero' non visualizza il cronometro col tempo che scorre, mentre eseguendo il programma da python va tutto bene.

Barabba83
08-02-2010, 16:57
Penso di aver capito il problema!

Quando il programma sta dentro il ciclo while...non esegue alcuna funzione sull'interfaccia, pero' tutto il resto (ricevere dalla seriale, scrivere su file ecc...) lo esegue perfettamente.

Qualche idea sul perche' di questo?
O qualche idea su come risolvere la situazione???

Cmq... ti volevo ringraziare anticipatamente per l'interssamento...

Loading