Исполняемый файл pyinstaller создает несколько экземпляров программы. Как помешать этому сделать это? (Питон)Python

Программы на Python
Anonymous
Исполняемый файл pyinstaller создает несколько экземпляров программы. Как помешать этому сделать это? (Питон)

Сообщение Anonymous »

Я пытаюсь создать ролевую игру на Python и хочу показать прогресс другу. Проблема в том, что у моего друга нет Python в его системе, и я решил, что мне следует создать исполняемый файл. Я использовал pyinstaller, чтобы преобразовать мой скрипт в файл .exe. Проблема заключалась в том, что когда я тестировал exe-файл, он создавал несколько экземпляров программы. Я не понимаю, почему это происходит.
Вот мой код.

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

import random
import os
import sys
import time
from playsound import playsound
import multiprocessing

class Unit:
def __init__(self, name, hp, strength, defense):
self.name = name
self.hp = hp
self.strength = strength
self.defense = defense

def __str__(self):
return f"""Name: {self.name}
HP  : {self.hp}
STR : {self.strength}
DEF : {self.defense} \n"""

def attack(self, enemy):
input("Press Enter to continue \n")
print(f"{self.name} attacks {enemy.name}!")
randomVariable = random.randint(0, 100)
if randomVariable < 70:
damage = self.strength - enemy.defense
damage = notLessZero(damage)
print(f"{self.name} hits {enemy.name} for {damage}!")
enemy.hp -= damage
enemy.hp = notLessZero(enemy.hp)
print(enemy)
else:
print("Miss!")

def notLessZero(variable):
return max(0, variable)

def battle(playerUnit, enemyUnit):
while enemyUnit.hp > 0:
playerUnit.attack(enemyUnit)

def loopingMusic(soundFile):
while True:
playsound("music/cats.wav")

def main():
name = input("What's your name? \n")
print("a")
p = multiprocessing.Process(target=loopingMusic, args=("cats.wav",))
p.start()
print("b")
playerUnit = Unit(name, 5, 6, 2)
enemyUnit = Unit("Enemy", 5, 2, 3)
print("c")
print(playerUnit)
print(enemyUnit)
print("d")
battle(playerUnit, enemyUnit)
print("e")
p.terminate()
print("f")
playsound('music/riff.wav', block = False)
print("g")
print("Enemy defeated\n")
input("Congatulations\n")

if __name__ == '__main__':
sys.exit(main())
Журнал сообщений при использовании pyInstaller (1/2)
Журнал сообщений при вызове pyInstaller (2/2)
Тестирование исполняемого файла. Дает странные результаты
Я подозреваю, что это как-то связано с использованием мной многопроцессорной обработки, но я не могу найти много информации об этом, хотя был бы рад, если бы меня поправили. В идеале мой код должен просто переходить от a к g без повторения букв.
Изменить: мне предложили этот вопрос: проблема многопроцессорности [pyqt, py2exe]Однако я не использую FreezeSupport() для своего приложения и не совсем знаю, как применить его к моей проблеме.
Редактировать 2: я решил проблему проблема. Вместо использования многопроцессорности я использовал поток, а вместо playsound я использую pygame

Подробнее здесь: https://stackoverflow.com/questions/788 ... ow-to-stop

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