«ModuleNotFoundError: нет модуля с именем «pygame»» при компиляции кода Python с использованием PyInstaller (MacOS)Python

Программы на Python
Ответить
Anonymous
 «ModuleNotFoundError: нет модуля с именем «pygame»» при компиляции кода Python с использованием PyInstaller (MacOS)

Сообщение Anonymous »

У меня есть MacBook Pro с чипом M2 под управлением Sequoia 15.7.4. Я попытался скомпилировать проект pygame, используя библиотеку PyInstaller, однако при попытке запустить исполняемый файл я получил в терминале следующую ошибку:

Код: Выделить всё

ModuleNotFoundError: No module named 'pygame'
Программа отлично работает, когда я запускаю 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()
Заранее спасибо.
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»