У меня есть MacBook Pro с чипом M2 под управлением Sequoia 15.7.4. Я попытался скомпилировать проект pygame, используя библиотеку PyInstaller, однако при попытке запустить исполняемый файл я получил в терминале следующую ошибку:
Программа отлично работает, когда я запускаю python3 main.py из исходного каталога, а также работает при запуске в VSCode. Моя версия Python — 3.9.6, а версия PyInstaller — 6.19.0.
Я встречал других людей, у которых была такая же ошибка, однако, насколько я мог судить, они установили pygame только локально в VSCode, а не на свой компьютер. Я на 90% уверен, что он действительно установлен правильно, потому что, как я уже упоминал ранее, я могу запустить код прямо с терминала.
Кто-нибудь знает, как это исправить, чтобы исполняемый файл можно было запускать на моем компьютере?
В случае, если это поможет, вот код, который я пытаюсь скомпилировать:
import pygame, time, sys
pygame.init()
size = 600
screen = pygame.display.set_mode((size, size + 40))
pygame.display.set_caption("Conway's Game of Life")
smallfont = pygame.font.SysFont("Corbel",35)
ttr = "Paused (press p to change)"
class Cell:
def __init__(self, x, y, state, indexX, indexY):
self.x = x
self.y = y
self.state = state
self.nextState = state
self.neighbours = []
self.indexX = indexX
self.indexY = indexY
def getNeighbours(self):
tl = grid[int(size/10) - 1][int(size/10) - 1]
t = grid[int(size/10) - 1][self.indexX]
tr = grid[int(size/10) - 1][0]
l = grid[self.indexY][int(size/10) - 1]
r = grid[self.indexY][0]
bl = grid[0][int(size/10) - 1]
b = grid[0][self.indexX]
br = grid[0][0]
if self.indexY > 0:
t = grid[self.indexY-1][self.indexX]
if self.indexX > 0:
tl = grid[self.indexY-1][self.indexX-1]
if self.indexX < int(size/10) - 1:
tr = grid[self.indexY-1][self.indexX+1]
if self.indexX > 0:
l = grid[self.indexY][self.indexX-1]
if self.indexX < int(size/10) - 1:
r = grid[self.indexY][self.indexX+1]
if self.indexY < int(size/10) - 1:
b = grid[self.indexY+1][self.indexX]
if self.indexX > 0:
bl = grid[self.indexY+1][self.indexX-1]
if self.indexX < int(size/10) - 1:
br = grid[self.indexY+1][self.indexX+1]
self.neighbours=[tl,t,tr,l,r,bl,b,br]
def getNextState(self):
self.getNeighbours()
total = 0
for neighbour in self.neighbours:
if neighbour.state == 1:
total += 1
if self.state == 1 and total < 2:
self.nextState = 0
if self.state == 1 and (total == 2 or total == 3):
self.nextState = 1
if self.state == 1 and total > 3:
self.nextState = 0
if self.state == 0 and total == 3:
self.nextState = 1
def updateState(self):
self.state = self.nextState
grid=[]
for i in range(int(size/10)):
grid.append([])
for j in range(int(size/10)):
grid[i].append(Cell(j*10, i*10, 0, j, i))
paused = True
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
if event.type == pygame.MOUSEBUTTONDOWN:
mouseX, mouseY = pygame.mouse.get_pos()
if pygame.mouse.get_pressed()[0]:
cell = grid[mouseY//10][mouseX//10]
cell.state = not cell.state
cell.nextState = cell.state
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_p:
paused = not paused
if not paused:
screen.fill((255, 255, 255))
ttr = "Unpaused (press p to change)"
else:
screen.fill((240, 240, 240))
ttr = "Paused (press p to change)"
text = smallfont.render(ttr , True , (255,255,255))
fontW,fontH = smallfont.size(ttr)
pygame.draw.rect(screen, (0, 0, 0), pygame.Rect(0, size, size, 40))
screen.blit(text,(size/2-fontW/2,size+20-fontH/2))
for y in range(len(grid)):
for x in range(len(grid[y])):
pygame.draw.line(screen, (30, 30, 30), (x*10, 0), (x*10, size))
pygame.draw.line(screen, (30, 30, 30), (0, y*10), (size, y*10))
if grid[y][x].state == 1:
pygame.draw.rect(screen, (0, 0, 0), pygame.Rect(x*10, y*10, 10, 10))
if not paused:
grid[y][x].getNextState()
for y in range(len(grid)):
for x in range(len(grid[y])):
if not paused:
grid[y][x].updateState()
pygame.display.update()
time.sleep(0.05)
pygame.quit()
exit()
У меня есть MacBook Pro с чипом M2 под управлением Sequoia 15.7.4. Я попытался скомпилировать проект pygame, используя библиотеку PyInstaller, однако при попытке запустить исполняемый файл я получил в терминале следующую ошибку:
[code]ModuleNotFoundError: No module named 'pygame'[/code] Программа отлично работает, когда я запускаю python3 main.py из исходного каталога, а также работает при запуске в VSCode. Моя версия Python — 3.9.6, а версия PyInstaller — 6.19.0. Я встречал других людей, у которых была такая же ошибка, однако, насколько я мог судить, они установили pygame только локально в VSCode, а не на свой компьютер. Я на 90% уверен, что он действительно установлен правильно, потому что, как я уже упоминал ранее, я могу запустить код прямо с терминала. Кто-нибудь знает, как это исправить, чтобы исполняемый файл можно было запускать на моем компьютере? В случае, если это поможет, вот код, который я пытаюсь скомпилировать: [code]import pygame, time, sys
pygame.init()
size = 600
screen = pygame.display.set_mode((size, size + 40)) pygame.display.set_caption("Conway's Game of Life")
smallfont = pygame.font.SysFont("Corbel",35) ttr = "Paused (press p to change)"
class Cell: def __init__(self, x, y, state, indexX, indexY): self.x = x self.y = y self.state = state self.nextState = state self.neighbours = [] self.indexX = indexX self.indexY = indexY
def getNeighbours(self): tl = grid[int(size/10) - 1][int(size/10) - 1] t = grid[int(size/10) - 1][self.indexX] tr = grid[int(size/10) - 1][0] l = grid[self.indexY][int(size/10) - 1] r = grid[self.indexY][0] bl = grid[0][int(size/10) - 1] b = grid[0][self.indexX] br = grid[0][0] if self.indexY > 0: t = grid[self.indexY-1][self.indexX] if self.indexX > 0: tl = grid[self.indexY-1][self.indexX-1] if self.indexX < int(size/10) - 1: tr = grid[self.indexY-1][self.indexX+1] if self.indexX > 0: l = grid[self.indexY][self.indexX-1] if self.indexX < int(size/10) - 1: r = grid[self.indexY][self.indexX+1] if self.indexY < int(size/10) - 1: b = grid[self.indexY+1][self.indexX] if self.indexX > 0: bl = grid[self.indexY+1][self.indexX-1] if self.indexX < int(size/10) - 1: br = grid[self.indexY+1][self.indexX+1]
self.neighbours=[tl,t,tr,l,r,bl,b,br]
def getNextState(self): self.getNeighbours() total = 0 for neighbour in self.neighbours: if neighbour.state == 1: total += 1 if self.state == 1 and total < 2: self.nextState = 0 if self.state == 1 and (total == 2 or total == 3): self.nextState = 1 if self.state == 1 and total > 3: self.nextState = 0 if self.state == 0 and total == 3: self.nextState = 1
for y in range(len(grid)): for x in range(len(grid[y])): pygame.draw.line(screen, (30, 30, 30), (x*10, 0), (x*10, size)) pygame.draw.line(screen, (30, 30, 30), (0, y*10), (size, y*10)) if grid[y][x].state == 1: pygame.draw.rect(screen, (0, 0, 0), pygame.Rect(x*10, y*10, 10, 10)) if not paused: grid[y][x].getNextState()
for y in range(len(grid)): for x in range(len(grid[y])): if not paused: grid[y][x].updateState()