Не могу скомпилировать код на python с библиотекой pygame с помощью pyinstaller
написал кликер на питоне, потом решил скинуть другу что бы он оценил вообще, в итоге решил скомпилировать код с помощью pyinstaller с флагом -F что бы выходной файл был один, создавалась папка dist и там был .exe файл с запуском программы, нажимаю открывалась консоль хотя я ее заблокировал, а игра не открывалась, как только я убрал флаг -F у меня начала открываться игра но потом сразу закрывалась.Не знаю как по итогу это решить уже второй день ломаю голову. подскажите пожалуйста что можно попробовать сделать, раньше с компилирование кода проблем небыло а щас появилась
вот весь код, не идеален еще много дописывать но результат есть и он радует:
import pygame
import os
def backfon():
screen.fill('Black')
def fon():
screen.fill('Red')
def DrawText(text, Textcolor, Rectcolor, x, y, fsize):
font = pygame.font.Font('fonts/Exo_2/Exo2-Italic-VariableFont_wght.ttf', fsize)
text = font.render(text, True, Textcolor, Rectcolor)
textRect = text.get_rect()
textRect.center = (x, y)
screen.blit(text, textRect)
pygame.init()
screen = pygame.display.set_mode((700, 400))
pygame.display.set_caption("килер")
icon = pygame.image.load('icon/9035171_play_game_music_icon.png')
pygame.display.set_icon(icon)
#image = pygame.image.load('icon/delete.png')
#new_image = pygame.transform.scale(image, (60, 60))
fonnn = pygame.image.load("icon/fon.png")
coin = 0
klick = 1
c = klick
cost = 50
costenergy = 1000
chisloenergy = 400
energy = 400
colorfon = 'Black'
boost = 0.02
running = True
costauto = 2500
auto = 0
try:
with open("save.txt", "r") as file:
coin = int(file.readline())
klick = int(file.readline())
c = int(file.readline())
cost = int(file.readline())
costenergy = int(file.readline())
chisloenergy = int(file.readline())
energy = int(file.readline())
boost = int(file.readline())
costauto = int(file.readline())
auto = int(file.readline())
except:
print('Ошибка')
while running:
screen.blit(fonnn, (0, 0))
#pygame.draw.rect(screen, (255, 255, 255),
# (433, 313, 300, 100), 8)
pygame.draw.rect(screen, (231, 156, 255),
(-209, 321, 1000, 100), 3)
if energy < chisloenergy:
energy += boost
coin += auto
keys = pygame.key.get_pressed()
DrawText("point " + str(f'{coin:.1f}'), 'white', f'{colorfon}', 345, 186, 16)
DrawText("улучшить " + str(f'{cost}'), 'white', f'{colorfon}',72, 335, 16)
DrawText("улучшить энергию " + str(f'{costenergy}'), 'white', f'{colorfon}', 115, 356, 16)
DrawText("энергия " + str(f'{energy:.1f}'), 'white', f'{colorfon}', 74, 377, 16)
#DrawText("улучшить бота " + str(f'{costauto:.1f}'), 'white', f'{colorfon}', 110, 390, 16)
#DrawText("удалить сохранения", 'white', f'{colorfon}', 600, 353, 20)
#screen.blit(new_image, (440, 320))
pygame.display.update()
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
pygame.quit()
elif keys[pygame.K_x]:
if energy > 0:
coin += 1
energy = energy - 1
elif event.type == pygame.MOUSEBUTTONDOWN:
mopos = pygame.mouse.get_pos()
if mopos >= (455, 0):
if mopos <= (650, 0):
os.remove("save.txt")
elif event.type == pygame.KEYDOWN:
if event.key != pygame.K_RETURN and event.key != pygame.K_z:
coin += klick
elif event.key == pygame.K_RETURN:
if coin >= cost:
coin = coin - cost
cost = cost * 7
klick = klick * 2
c = klick
elif event.key == pygame.K_z:
if coin >= costenergy:
coin = coin - costenergy
costenergy = costenergy * 5
chisloenergy = chisloenergy + 200
boost += 0.02
try:
with open("save.txt", "w") as file:
file.writelines([f'{coin}\n', f'{klick}\n', f'{c}\n', f'{cost}\n', f'{costenergy}\n',
f'{chisloenergy}\n', f'{energy}\n', f'{boost}\n', f'{costauto}\n',
f'{auto}\n'])
except:
print('Ошабка при работе с файлом')
Заранее Огромное спасибо!!
Ответы (1 шт):
Если Вы работаете в IDE, то скорее всего запускаете приложение в виртуальном окружении (папка venv). И, вероятно, именно в это виртуальное окружение Вы установили дополнительную библиотеку pygame.
А pyinstaller у Вас может запускаться не в виртуальном окружении, а с помощью основного python на ПК, для которого данная библиотека не установлена - в результате она не "крепится" к exe-файлу.
Попробуйте через консоль CMD установить pygame c помощью pip install pygame
и после этого снова собрать exe.