Я хочу иметь возможность конвертировать .py в .exe для проектов Python 3 Pygame 1.9.4 (на моем компьютере с Windows 10), и я успешно конвертировал некоторые файлы с помощью auto py в exe (один файл, на основе консоли). ):
https://nitratine.net/blog/post/auto-py-to-exe/.
Например, я попытался преобразовать код, который довольно далеко на этом сайте:
http://openbookproject.net/thinkcs/python/english3e/pygame.html. То есть:
import pygame
def main():
""" Set up the game and run the main game loop """
pygame.init() # Prepare the pygame module for use
surface_sz = 480 # Desired physical surface size, in pixels.
# Create surface of (width, height), and its window.
main_surface = pygame.display.set_mode((surface_sz, surface_sz))
# Set up some data to describe a small rectangle and its color
small_rect = (300, 200, 150, 90)
some_color = (255, 0, 0) # A color is a mix of (Red, Green, Blue)
while True:
ev = pygame.event.poll() # Look for any event
if ev.type == pygame.QUIT: # Window close button clicked?
break # ... leave game loop
# Update your game objects and data structures here...
# We draw everything from scratch on each frame.
# So first fill everything with the background color
main_surface.fill((0, 200, 255))
# Overpaint a smaller rectangle on the main surface
main_surface.fill(some_color, small_rect)
# Now the surface is ready, tell pygame to display it!
pygame.display.flip()
pygame.quit() # Once we leave the loop, close the window.
main()
.exe файл запускался, как и должен при открытии. Однако некоторые программы, которые я пишу, работают только частично после преобразования.
Одна такая программа будет:
import pygame as pg
def main():
pg.init()
pg.display.set_caption('Some Caption')
screen = pg.display.set_mode((640, 480))
afont = pg.font.SysFont("some_font", 32)
done=False
while not done:
for event in pg.event.get():
if event.type == pg.QUIT:
done = True
screen.fill(0)
sometext = afont.render("Amazing text"
.format(0, 0), True, (250,200,250))
screen.blit(sometext, (10, 50))
pg.display.flip()
if __name__.endswith('__main__'):
main()
pg.quit()
После преобразования в exe, когда я его открываю, появляется текст о pygame, а также экран, который должен появиться, показывая заголовок, который я установил ('Some Caption'). Экран, который выскочил, однако, черный и закрывается через некоторое время, не показывая, что он должен. Тем не менее, я получил свой exe-файл без каких-либо ошибок (что я мог видеть в любом случае в выводе графического интерфейса, который я использовал для преобразования, то есть auto py в exe). Итак, в поисках решений я нашел этот сайт:
https://nitratine.net/blog/post/issues-when-using-auto-py-to-exe/.
Было много сообщений об ошибках и общей информации, но то, что я видел по поводу программы, которая открывается, но не делает то, что должно, перед закрытием было:
Терминал просто открывается и закрывается, но ошибок нет
двойной щелчок для запуска скрипта Python, что происходит? Открывается ли и
закрыть тоже? Это означает, что этот инструмент сделал свою работу правильно и
Сценарий заканчивается так же, как и должен.
Скорее всего, вы думаете, что результат должен оставаться видимым, потому что вы
всегда использую IDLE или IDE, и это то, что делают эти инструменты. Добавить
оператор как input () в конце вашего скрипта, чтобы заблокировать выполнение
и ждите, пока вы нажмете ввод, прежде чем закрыться.
Это не решение моей проблемы, так как моя программа работает, если я дважды щелкну на скрипте python. Тем не менее, я думаю, что в этом есть хороший момент, то есть в моем коде может быть что-то, что плохо обрабатывает преобразование, что вероятно, поскольку код из http://openbookproject.net/thinkcs/python/english3e/pygame.html сработал после преобразования в .exe, когда использовался тот же метод.
Поэтому мой вопрос, , что делает мой код неработающим после преобразования из .py в .exe? , и , в таком случае, каким образом это можно исправить? . Знание того, что работает, а что нет, когда дело доходит до преобразования .py в .exe, позволит большему количеству программ работать правильно, когда они являются .exe.
Спасибо