Не могу скомпилировать код на 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 шт):

Автор решения: mrgervant

Если Вы работаете в IDE, то скорее всего запускаете приложение в виртуальном окружении (папка venv). И, вероятно, именно в это виртуальное окружение Вы установили дополнительную библиотеку pygame.

А pyinstaller у Вас может запускаться не в виртуальном окружении, а с помощью основного python на ПК, для которого данная библиотека не установлена - в результате она не "крепится" к exe-файлу.

Попробуйте через консоль CMD установить pygame c помощью pip install pygame и после этого снова собрать exe.

→ Ссылка