Python 如何在pyinstaller上包括图像和音乐等资产

Python 如何在pyinstaller上包括图像和音乐等资产,python,cmd,pygame,pyinstaller,Python,Cmd,Pygame,Pyinstaller,我使用pyinstaller将我的文件设置为exe,但每次打开exe时,它都会给我一个错误,说无法执行主脚本。我尝试了很多事情,询问了其他人,得出的结论是没有识别资产。那么,我该如何获得它呢?请确定资产,这样我就可以运行exe了 这是我的游戏代码 import random import math import time from pygame import mixer pygame.init() #width, heigh

我使用pyinstaller将我的文件设置为exe,但每次打开exe时,它都会给我一个错误,说
无法执行主脚本
。我尝试了很多事情,询问了其他人,得出的结论是没有识别资产。那么,我该如何获得它呢?请确定资产,这样我就可以运行exe了

这是我的游戏代码

import random
import math
import time

from pygame import mixer


pygame.init()
                                 #width, height
screen = pygame.display.set_mode((1000, 800))
background = pygame.image.load(r"C:\Users\35387\Documents\Python Coding\Shoot Deannes\back.png")

mixer.music.load(r"C:\Users\35387\Documents\Python Coding\Shoot Deannes\Song.mp3")
mixer.music.play(-1)

title = pygame.display.set_caption("Shoot Deannes")

icon = pygame.image.load(r"C:\Users\35387\Documents\Python Coding\Shoot Deannes\Deanne GYypsu python.png")
pygame.display.set_icon(icon)

lov = pygame.image.load(r"C:\Users\35387\Documents\Python Coding\Shoot Deannes\Lov.png")
show_image = False

playerImg = pygame.image.load(r"C:\Users\35387\Documents\Python Coding\Shoot Deannes\Python Player.png")
playerX = 450
playerY = 580
playerX_change = 0
playerY_change = 0

enemyImg = []
enemyX = []
enemyY = []
enemyX_change = []
enemyY_change = []
num_of_enemies = 5

for i in range(num_of_enemies):
    enemyImg.append(pygame.image.load(r"C:\Users\35387\Documents\Python Coding\Shoot Deannes\Pygame Enemy D.png"))
    enemyX.append(random.randint(0, 935))
    enemyY.append(random.randint(40, 140))
    enemyX_change.append(1.5)
    enemyY_change.append(random.uniform(0.3, 0.8))

bulletImg = pygame.image.load(r"C:\Users\35387\Documents\Python Coding\Shoot Deannes\Shoot.png")
bulletX = 0
bulletY = 0
bulletX_change = 0
bulletY_change = 7
bullet_state = "ready"

score_value = 0

font = pygame.font.Font("freesansbold.ttf", 32)
textX = 20
textY = 20

def show_score(x, y):
    score = font.render("Landed shots :" + str(score_value), True, (255, 192, 203))
    screen.blit(score, (x, y))

def player(x, y):
    screen.blit(playerImg, (x, y))

def enemy(x, y, i ):
    screen.blit(enemyImg[i], (x, y))

def fire_bullet(x, y):
    global bullet_state
    bullet_state = "fire"
    screen.blit(bulletImg, (x + 16, y + 10))  

def isCollision(enemyX, enemyY, bulletX, bulletY):
    distance = math.sqrt(math.pow(enemyX - bulletX,2)) + (math.pow(enemyY - bulletY,2))
    if distance < 50:
        return True
    else: 
        return False

def isCollision2(enemyX, enemyY, playerX, playerY):
    distance = math.sqrt(math.pow(enemyX - playerX,2)) + (math.pow(enemyY - playerY,2))
    if distance < 70:
        return True
    else: 
        return False             

running = True
while running:
    screen.fill((0,0,0))
    screen.blit(background, (0, 0))
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_LEFT:
                playerX_change = -3.5
            if event.key == pygame.K_RIGHT:
                playerX_change = 3.5      
            if event.key == pygame.K_SPACE:
                if bullet_state is "ready":
                    bullet_sound = mixer.Sound(r"C:\Users\35387\Documents\Python Coding\Shoot Deannes\ORG.wav")
                    bullet_sound.play()
                    bulletX = playerX 
                    bulletY = playerY
                    fire_bullet(bulletX, bulletY)         


        if event.type == pygame.KEYUP:
            if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT:
                playerX_change = 0  
        

                
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_DOWN:
                playerY_change = 2.5
            if event.key == pygame.K_UP:
                playerY_change = -2.5        
        if event.type == pygame.KEYUP:
            if event.key == pygame.K_DOWN or event.key == pygame.K_UP:
                playerY_change = 0  
    
        
    playerX += playerX_change
    playerY += playerY_change
    if playerX <=0:
        playerX = 0
    elif playerX >=935:
        playerX = 935   

    for i in range(num_of_enemies):
        enemyX[i] += enemyX_change[i]
        enemyY[i] += enemyY_change[i]
        if enemyX[i] <=0:
            enemyX_change[i] = 1.5
            enemyY[i] += enemyY_change[i]
        elif enemyX[i] >=935:
            enemyX_change[i] = -1.5
            enemyY[i] += enemyY_change[i]
   
        collision = isCollision(enemyX[i], enemyY[i], bulletX, bulletY)
        if collision:
            bulletY = 580
            bullet_state = "ready"
            score_value += 1
            enemyX[i] = random.randint(0, 1000)
            enemyY[i] = random.randint(40, 140)   
        
        collision2 = isCollision2(enemyX[i], enemyY[i], playerX, playerY)
        if collision2:
            playerX = 4000
            playerY = 4000
            gameover_sound = mixer.Sound(r"C:\Users\35387\Documents\Python Coding\Shoot Deannes\GAME OVER.wav") 
            gameover_sound.play()
            show_image = True

        if show_image:
            pygame.display.set_mode((480, 910)).blit(lov, (0, 0))
       

        enemy(enemyX[i], enemyY[i], i)                  

    if bulletY <=0 :
        bulletY =580
        bullet_state = "ready"

    if bullet_state is "fire":
        fire_bullet(bulletX, bulletY)    
        bulletY -= bulletY_change


    player(playerX, playerY)
    show_score(textX, textY)
    pygame.display.update()
随机导入
输入数学
导入时间
从pygame导入混合器
pygame.init()
#宽度、高度
screen=pygame.display.set_模式((1000800))
background=pygame.image.load(r“C:\Users\35387\Documents\Python Coding\Shoot Deannes\back.png”)
mixer.music.load(r“C:\Users\35387\Documents\Python Coding\Shoot Deannes\Song.mp3”)
混音器。音乐。播放(-1)
title=pygame.display.set_标题(“拍摄迪安”)
icon=pygame.image.load(r“C:\Users\35387\Documents\Python Coding\shot Deannes\Deanne GYypsu Python.png”)
pygame.display.set_图标(图标)
lov=pygame.image.load(r“C:\Users\35387\Documents\Python Coding\shot Deannes\lov.png”)
show_image=False
playerImg=pygame.image.load(r“C:\Users\35387\Documents\Python Coding\shot Deannes\Python Player.png”)
playerX=450
playerY=580
playerX_change=0
playerY_change=0
enemyImg=[]
灌肠剂=[]
Enemy=[]
enemyX_change=[]
Enemy_change=[]
敌人的数量=5
对于范围内的i(敌人的数量):
enemyImg.append(pygame.image.load(r“C:\Users\35387\Documents\Python Coding\shot Deannes\pygame敌方D.png”))
enemyX.append(random.randint(0935))
Enemy.append(random.randint(40140))
enemyX_变更追加(1.5)
enemyY_change.append(随机、均匀(0.3,0.8))
Bulleting=pygame.image.load(r“C:\Users\35387\Documents\Python Coding\shot Deannes\shot.png”)
bulletX=0
bulletY=0
bulletX_变化=0
bulletY_change=7
bullet_state=“就绪”
分值=0
font=pygame.font.font(“freesansbold.ttf”,32)
textX=20
textY=20
def显示_分数(x,y):
score=font.render(“落地射击:+str(分数值),真,(255,192,203))
屏幕blit(分数,(x,y))
def播放器(x,y):
屏幕光点(playerImg,(x,y))
def敌人(x,y,i):
screen.blit(enemyImg[i],(x,y))
def火焰弹(x,y):
全球子弹头状态
bullet_state=“火灾”
屏幕光点(项目符号,(x+16,y+10))
def isCollision(灌肠剂、灌肠剂、子弹剂、子弹剂):
距离=math.sqrt(math.pow(enemyX-bulletX,2))+(math.pow(enemyY-bulletY,2))
如果距离小于50:
返回真值
其他:
返回错误
def isCollision2(灌肠、灌肠、玩耍、玩耍):
距离=math.sqrt(math.pow(enemyX-playerX,2))+(math.pow(enemyY-playerY,2))
如果距离<70:
返回真值
其他:
返回错误
运行=真
运行时:
屏幕填充((0,0,0))
屏幕光点(背景,(0,0))
对于pygame.event.get()中的事件:
如果event.type==pygame.QUIT:
运行=错误
如果event.type==pygame.KEYDOWN:
如果event.key==pygame.K_左:
playerX_变化=-3.5
如果event.key==pygame.K_RIGHT:
playerX_变化=3.5
如果event.key==pygame.K_空间:
如果bullet_状态为“就绪”:
bullet\u sound=mixer.sound(r“C:\Users\35387\Documents\Python Coding\Shoot Deannes\ORG.wav”)
子弹声
bulletX=playerX
弹珠游戏
子弹射击(子弹,子弹)
如果event.type==pygame.KEYUP:
如果event.key==pygame.K_左或event.key==pygame.K_右:
playerX_change=0
如果event.type==pygame.KEYDOWN:
如果event.key==pygame.K_向下:
playerY_change=2.5
如果event.key==pygame.K_UP:
playerY_change=-2.5
如果event.type==pygame.KEYUP:
如果event.key==pygame.K_向下或event.key==pygame.K_向上:
playerY_change=0
playerX+=playerX\u更改
playerY+=playerY\u变化
如果playerX=935:
playerX=935
对于范围内的i(敌人的数量):
enemyX[i]+=enemyX_变化[i]
Enemy[i]+=Enemy_变化[i]
如果enemyX[i]=935:
enemyX_变化[i]=-1.5
Enemy[i]+=Enemy_变化[i]
冲突=isCollision(enemyX[i],enemyY[i],Bullett,bulletY)
如果发生碰撞:
bulletY=580
bullet_state=“就绪”
得分值+=1
enemyX[i]=random.randint(0,1000)
enemyY[i]=random.randint(40140)
碰撞2=isCollision2(enemyX[i],enemyY[i],playerX,playerY)
如果发生碰撞2:
playerX=4000
playerY=4000
gameover\u sound=mixer.sound(r“C:\Users\35387\Documents\Python Coding\shot Deannes\GAME OVER.wav”)
gameover_sound.play()
show_image=True
如果显示图像:
pygame.display.set_模式((480910)).blit(lov,(0,0))
敌人(enemyX[i],enemyY[i],i)

如果bulletY将资产与可执行文件放在同一文件夹中。(或者,如果它希望资产位于子文件夹中,请将它们放在那里)

@Jeromus知道您的代码和文件夹结构会很有帮助确定您是否需要我的完整代码,但无论如何,在我的文件夹中有一些PGN、一个wav文件和一个mp3`@Jeromus是的,你的代码会很有帮助,还有可执行文件所在的文件夹是如何设置的好的,我会放在代码中,你说的可执行文件在
dist
folder@Jeromus我的意思是,与可执行文件的位置相比,您将资产放在何处听起来,问题在于您处理资源路径的方式以及如何处理资源路径加载它们。我想找一些解释。