Herkese merhaba sanırım bir python dosyasını exe haline getirmenin en kolay yolu pyinstaller kullanmak.Ben de bunu kullanrak pygame,random,time modüllerinin olduğu dosyamı exe'ye çevirdim.Bir sorunla karşılaştım.Program açılıyor ancak işlemiyor.Pygame yükleniyor fakat diğer modüllerin yüklenip yüklenmediğinden emin değilim.Bana bu konuda yardımcı olabilirseniz detaylandırmak isterim.
3 sene evvel orta büyüklükte (500 satır) Python skriptini py2exe modülü ile exe ye cevirdik ve bir hosting firmasının windows sunucusunda exe sorunsuz çalıştı.
pyinstaller'da yazdığınız kodu exe'ye çevirirken kodunuzu kısaca bir gözden geçirin, eğer import ettiğiniz ama o kullanmadığınız bir kütüphane varsa silin. yakalanamayan hatalardan biri bu oluyor genellikle.
hocam kullandığım kütüphaneler pygame,random ve time kütüphaneleri.Bunlar için ek bir işlem yapmam gerekli midir?
import edip kod satırlarında kullanmışsanız sorun olmaz ama mesela from pygame import * yapmışsanız dediğim olabilir. onun yerine "from pygame import (sadece kullandığınız class'lar) olarak bi düzenleyin isterseniz. ben arayüz tasarlarken from pyqt5 import * yaptığımda olmuştu böyle bir şey. düzeltip "from pyqt5 import QtWidgets,QtApplication" vs vs sadece kullandıklarımı eklemiştim.
onun dışında pygame hakkında çok bilgim olmadığı için yardım edemeyecem maalesef. ama yukarı da dediklerimi tam anlayamadıysanız kodları gönderin sizin yerine düzenlemeler yaparım çok uzun değilse.
import edip kod satırlarında kullanmışsanız sorun olmaz ama mesela from pygame import * yapmışsanız dediğim olabilir. onun yerine "from pygame import (sadece kullandığınız class'lar) olarak bi düzenleyin isterseniz. ben arayüz tasarlarken from pyqt5 import * yaptığımda olmuştu böyle bir şey. düzeltip "from pyqt5 import QtWidgets,QtApplication" vs vs sadece kullandıklarımı eklemiştim.
onun dışında pygame hakkında çok bilgim olmadığı için yardım edemeyecem maalesef. ama yukarı da dediklerimi tam anlayamadıysanız kodları gönderin sizin yerine düzenlemeler yaparım çok uzun değilse.
Alıntıları Göster
dediğinizi şimdi anladım deneyeceğim, alakanız için de teşekkür ederim.
hocam pm gönderim, geldi mi bilmiyorum ama aynı problem devam etti.Satırlar şu şekilde:
from pygame import draw,init,display,font,event, quit from random import randint, random,randrange from pygame.locals import KEYDOWN, QUIT from time import sleep init() pencerem=display.set_mode((800,600)) WHITE=(255,255,255) BLACK=(0,0,0) GRAY=(200,200,200) RED=(255,0,0) GREEN=(0,255,0) DARKRED=(255,0,200) knmx=60 knmy=60 sagx=20 asagiy=20 haritasol=False haritasag=False haritayuk=False haritaasg=False yembyk=10 saga=True sola=False asg=False yuk=False hiz=20 uyku=0.01 kuyruk=[] gercekhiz=0 #ters orantı yemx=90 yemy=70 yazisekil=font.SysFont(None,40) degdi=False coktandegdi=False def yon(x): if int(x)==273 and (saga or sola)==True and (yuk and asg)==False: a=True b=False c=False d=False return a,b,c,d elif int(x)==274 and (saga or sola)==True and (yuk and asg)==False: a=False b=False c=False d=True return a,b,c,d elif int(x)==275 and (saga and sola)==False and (yuk or asg)==True: a=False b=True c=False d=False return a,b,c,d elif int(x)==276 and (saga and sola)==False and (yuk or asg)==True: a=False b=False c=True d=False return a,b,c,d else: return yuk,saga,sola,asg def hareket(): global n,m if yuk==True: for i in range(1): n=knmy-hiz m=knmx sleep(uyku) return n,m elif asg==True: for i in range(1): n=knmy+hiz m=knmx sleep(uyku) return n,m elif sola==True: for i in range(1): m=knmx-hiz n=knmy sleep(uyku) return n,m elif saga==True: for i in range(1): m=knmx+hiz n=knmy sleep(uyku) return n,m while True: skor=len(kuyruk)+1 pencerem.fill(BLACK) myfont=font.SysFont("Comic Sans MS",30) label=myfont.render("SKOR:"+str(skor),1,WHITE) pencerem.blit(label,(0,0)) for index in range(len(kuyruk)-1,0,-1): a=kuyruk[index-1].x b=kuyruk[index-1].y kuyruk[index].x=a kuyruk[index].y=b draw.rect(pencerem,GRAY,(kuyruk[index].x,kuyruk[index].y,kuyruk[index].width,kuyruk[index].height),2) for index in range(len(kuyruk)-1,0,-1): if ((((bas.x-kuyruk[index].x)**2)+((bas.y-kuyruk[index].y)**2))**(1/2))<5: degdi=True if degdi: coktandegdi=True if coktandegdi: knmx=400 knmy=300 del kuyruk[:]
for i in range(len(kuyruk)): ix=kuyruk[i].x ye=kuyruk[i].y if abs((yems.x)-ix)<15 and abs((yems.y)-ye)<15: yems.x=kuyruk[-1].x yems.y=kuyruk[-1].y if len(kuyruk) >0: a=bas.x b=bas.y kuyruk[0].x=a kuyruk[0].y=b draw.rect(pencerem,GRAY,(kuyruk[0].x,kuyruk[0].y,kuyruk[0].width,kuyruk[0].height),2) bas=draw.rect(pencerem,GRAY,(knmx,knmy,sagx,asagiy),2) yems=draw.circle(pencerem,RED,(yemx,yemy),10,2) if ((((bas.x-yems.x)**2)+((bas.y-yems.y)**2))**(1/2))<10: yenikuyruk=draw.rect(pencerem,GRAY,(knmx,knmy,sagx,asagiy),2) kuyruk.append(yenikuyruk) potx=randrange(1,79,2) poty=randrange(1,59,2) yemx=potx*10 yemy=poty*10 for olay in event.get(): if olay.type==QUIT: quit() elif olay.type==KEYDOWN: kolay=olay.key yuk,saga,sola,asg=yon(kolay) sleep(0.1) knmy,knmx=hareket() if knmx>790: knmx=0 elif knmx<0: knmx=800 elif knmy<0: knmy=600 elif knmy>590: knmy=0 coktandegdi=False
mesajınız gelmedi yeni fırsatım oldu kodları incelemeye. dediğim gibi daha önce hiç pygame çalışmadığım için kodları tam olarak anlayamadım ve oyun algoritmalarına çok uzağım ancak genel hatlarıyla incelediğim ve klasik algoritmasına bakınca ufak bir kaç eksiklik gördüm sanırım. öncelikle son satırlarda tam olarak neden olduğunu anlayamadığım bir while bloğu var. sonsuz döngü olması için mi koydunuz onu? onun yerine muhtemelen pygame'de de if __name__ == "__main__": şeklinde başlayarak yazmanız gerekecek. onu bir kontrol edin düzeltmeniz gerekebilir.
ayrıca github'da bir kaç kişinin snake kodunu inceledim üç aşağı beş yukarı sizinkine benzer yazılmış. onlarınkini bende exe'ye çevirdim ve açılmadı exe halleri ama google'da çok kısa "pygame exe not opening" gibi basit bir aramayla çokça sonuç çıkıyor özellikle stackoverlow'da sizinkine benzer sorun yaşayanlar var çözümü orada bulabilirsiniz.
edit: şu arkadaş python gurusu sayılabilir, onun yaptığı .py to .exe çözümünü izler kendin denersen halledebilirsin
Hocam ben bu işi hobi olarak yapıyorum.Oyunları tasarlayıp daha sonra yapay zeka üzerinde test edeceğim.While döngüsünü yılanın konumunun her döngüde değişmesi için yapıyorum.Yani ben profesyonel değilim, tıp okuyorum sağdan soldan öğrendiklerimle girdim bu işe :D algoritma yazmayı seviyorum yani öyle özetleyebilirim.O yüzden if__name=="__main__" gibi bir oluşumun neden kullanılması gerektiğini ve ne işe yaradığını bilmiyorum.Hatta nesne tabanlı programlamayı bile henüz öğrendiğim için kodumda hiç sınıf yok fark ettiyseniz.O yüzden mazur görün... Bıraktığınız kaynak ve çözüm yolları için çok teşekkür ederim :)
Konu hala güncel şöyle bir ekleme yapabiliyorum,tekrardan uzun soluklu bir araştırma yaptım. Bildiğiniz üzere error sonucu program hızlıca kapanıyor bu nedenle sorunu yakalamam çok uzun sürdü.Yaklaşık 20 defa screenshot aldım.Evet sonunda yakaladım her ne kadar amelece de olsa :) Sanırım sorun SysFont fonksiyonuyla alakalı.Ama neden problem oldu bilmiyorum.Buyrun hata mesajı ve python'da kullandığım hatayla alakalı satır.
Hocam telefon numaramı başka bir dhforum hesabında kullandığım için pm atamıyormuşum.Kusura bakmayın o yüzden buradan cevap vermek zorunda kaldım.
Ben Anaconda ya da Pycharm kullanmadım.Sırf küçük sorunlar çıkartıyorlar ve bana kompleks geldiği için. Python'un kendi default IDLE kullanıyorum. Sorun sanırım ekrana yazı yazdırdığım kodlarda python dışında tanımlanması zor olabilir belki ondandır.Kodları buna uygun olarak düzenleyip tekrar deneyeceğim. Hocam tekrardan alakanız için çok teşekkür ediyorum.
Buyur eğer hala bulamadıysan exe hali ve py dosyası.En başta yazısekil diye tanımlamışsın daha sonra while döngüsünde tekrar tanımlamışsın.Ama üsttekini kullanmamışsın bunu neden yaptığını anlamadım.Ama çalışmamasındaki problem kullanmamak değil yukarda fontu none diye tanımlamışsın.None diye tanımlayınca freesanbold diye bir fontu otomatik olarak seçiyor.Ve bu font ya bozuk yada bilgisayarda bulunmuyor bu yüzden font hata veriyor(Sanırım herkezde veriyor bu hatayı).None yerine arial,comic sans ms gibi bilgisayarda bulunan bir fontu yaz.Ve birde import pygame olarak düzenledim en üstü Exeyi ise py dosyasını attıgın klasörde shift+sağ click>komut penceresini burada aç > 'pyinstaller dosyaadı.py' olarak yaptım
Bu mesaja 1 cevap geldi. Cevapları Gizle
Bu mesaja 1 cevap geldi. Cevapları Gizle
Bu mesajda bahsedilenler: @gel pc pc
onun dışında pygame hakkında çok bilgim olmadığı için yardım edemeyecem maalesef. ama yukarı da dediklerimi tam anlayamadıysanız kodları gönderin sizin yerine düzenlemeler yaparım çok uzun değilse.
Bu mesaja 2 cevap geldi. Cevapları Gizle
Bu mesajda bahsedilenler: @gel pc pc
ayrıca github'da bir kaç kişinin snake kodunu inceledim üç aşağı beş yukarı sizinkine benzer yazılmış. onlarınkini bende exe'ye çevirdim ve açılmadı exe halleri ama google'da çok kısa "pygame exe not opening" gibi basit bir aramayla çokça sonuç çıkıyor özellikle stackoverlow'da sizinkine benzer sorun yaşayanlar var çözümü orada bulabilirsiniz.
edit: şu arkadaş python gurusu sayılabilir, onun yaptığı .py to .exe çözümünü izler kendin denersen halledebilirsin
< Bu mesaj bu kişi tarafından değiştirildi gel pc pc -- 3 Şubat 2019; 1:16:18 >
Bu mesaja 2 cevap geldi. Cevapları Gizle
Bıraktığınız kaynak ve çözüm yolları için çok teşekkür ederim :)
Bu mesajda bahsedilenler: @gel pc pc
Bildiğiniz üzere error sonucu program hızlıca kapanıyor bu nedenle sorunu yakalamam çok uzun sürdü.Yaklaşık 20 defa screenshot aldım.Evet sonunda yakaladım her ne kadar amelece de olsa :)
Sanırım sorun SysFont fonksiyonuyla alakalı.Ama neden problem oldu bilmiyorum.Buyrun hata mesajı ve python'da kullandığım hatayla alakalı satır.
< Resime gitmek için tıklayın >
Ben Anaconda ya da Pycharm kullanmadım.Sırf küçük sorunlar çıkartıyorlar ve bana kompleks geldiği için.
Python'un kendi default IDLE kullanıyorum.
Sorun sanırım ekrana yazı yazdırdığım kodlarda python dışında tanımlanması zor olabilir belki ondandır.Kodları buna uygun olarak düzenleyip tekrar deneyeceğim.
Hocam tekrardan alakanız için çok teşekkür ediyorum.
Bu mesajda bahsedilenler: @gel pc pc
Exeyi ise py dosyasını attıgın klasörde shift+sağ click>komut penceresini burada aç > 'pyinstaller dosyaadı.py' olarak yaptım
Link
Bu mesaja 1 cevap geldi. Cevapları Gizle
Bir de yorum satırlarına bakınca da duygulandım.Sizin gibi iyilik sever insanlar oldukça bu Dünya dönecektir :))
Bu mesajda bahsedilenler: @Doubleimp