pyinstaller打包后反复运行

pyinstaller打包后重复运行程序(单线程)
源码:

from os import system
import random
import pygame,sys
size=50
system("maze "+str(size))
size=int(size)
image_max_size=50
rdnum=size/2
pygame.init()
#acon=pygame.image.load("mainper.png")
#pygame.display.set_icon(acon)
#pygame.display.set_caption("maze")
wall=pygame.image.load("wall.png")
road=pygame.image.load("road.png")
mainper=pygame.image.load("mainper.png")
end=pygame.image.load("end.png")
qwertyuiop=open("mrd.txt","r")
rem=pygame.image.load("re.png")
a=qwertyuiop.readlines()
a=a[1:]
class re:
    def __init__(self,xx,yy):
        self.x=xx
        self.y=yy
    def run(self):
        while 1==1:
            rn=random.randint(0,3)
            if rn==0:
                self.x=self.x+1
                if not (self.x>=0 and self.xand self.y>=0 and self.yand a[self.x][self.y]=='1' ):
                    self.x=self.x-1
                else:
                    break
            elif rn==1:
                self.x=self.x-1
                if not (self.x>=0 and self.xand self.y>=0 and self.yand a[self.x][self.y]=='1'):
                    self.x=self.x+1
                else:
                    break
            elif rn==2:
                self.y=self.y+1
                if not (self.x>=0 and self.xand self.y>=0 and self.yand a[self.x][self.y]=='1'):
                    self.y=self.y-1
                else:
                    break
            elif rn==3:
                self.y=self.y-1
                if not (self.x>=0 and self.xand self.y>=0 and self.yand a[self.x][self.y]=='1'):
                    self.y=self.y+1
                else:
                    break
remi=re(size-1,size-1)
if size>14:
    image_max_size=8
    wall=pygame.image.load("wall_l.png")
    road=pygame.image.load("road_l.png")
    mainper=pygame.image.load("mainper_l.png")
    end=pygame.image.load("end_l.png")
screen=pygame.display.set_mode([size*image_max_size,size*image_max_size])
screen.blit(rem,[remi.x*8,remi.y*8])
pygame.time.set_timer(pygame.USEREVENT,500)
per=[0,0]
screen.fill([0,0,0])
for i in range(0,size):
    for j in range(0,size):
        #print i,j,i==0 and j==0,'\n'
        
        if a[i][j]=="1":
            screen.blit(road,[i*image_max_size,j*image_max_size])
screen.blit(mainper,per)
screen.blit(end,[(size-1)*image_max_size,(size-1)*image_max_size])
        #print i,j,a[i][j],[i*image_max_size,j*image_max_size],'\n'
#screen.blit(road,[0*image_max_size,3*image_max_size])
def inwall():
    if per[0]and per[1]and per[0]>=0 and per[1]>=0:
        if a[per[0]//image_max_size][per[1]//image_max_size]=="1":
            return 1
    return 0

pygame.key.set_repeat(100,50)
running=True
while running:
    if per[0]==(size-1)*image_max_size and per[1]==(size-1)*image_max_size:
        running=False
    for event in pygame.event.get():
        if event.type==pygame.QUIT:
            running=False
        elif event.type==pygame.KEYDOWN:
            if event.key==pygame.K_DOWN:
                screen.blit(road,per)
                per[1]+=image_max_size
                if not inwall():
                    per[1]-=image_max_size
                    screen.blit(mainper,per)
                else:
                    screen.blit(mainper,per)
            elif event.key==pygame.K_UP:
                screen.blit(road,per)
                per[1]-=image_max_size
                if not inwall():
                    per[1]+=image_max_size
                    screen.blit(mainper,per)
                else:    
                    screen.blit(mainper,per)
            elif event.key==pygame.K_RIGHT:
                screen.blit(road,per)
                per[0]+=image_max_size
                if not inwall():
                    per[0]-=image_max_size
                    screen.blit(mainper,per)
                else:    
                    screen.blit(mainper,per)
            elif event.key==pygame.K_LEFT:
                screen.blit(road,per)
                per[0]-=image_max_size
                if not inwall():
                    per[0]+=image_max_size
                    screen.blit(mainper,per)
                else:    
                    screen.blit(mainper,per)
        elif event.type==pygame.USEREVENT:
                screen.blit(road,[remi.x*8,remi.y*8])
                remi.run()
                screen.blit(rem,[remi.x*8,remi.y*8])
    
    pygame.display.flip()
pygame.quit()


版本:3.11.1

把第五行删掉试试
如果你的程序打包后命名为maze,那么第五行相当于一直在启动maze,启动maze后又会启动新的maze,从而反复运行

在main中加这一行:
multiprocessing.freeze_support()

这个问题可能是由于使用的模块中有多线程或者并发处理的问题