Когда я компилирую свою программу на python с помощью pyinstaller, я получаю эту ошибку в конце компиляции:
File "c:\users\red4d\appdata\local\programs\python\python36-32\lib\site-packages\PyInstaller\hooks\pre_safe_import_module\hook-setuptools.extern.six.moves.py", line 34, in pre_safe_import_module
for real_module_name, six_module_name in real_to_six_module_name.items():
AttributeError: 'str' object has no attribute 'items'
Вчера я не получал эту ошибку, и я существенно не изменил свой код.Пожалуйста, помогите!
У меня значительный объем кода, но я считаю, что проблема заключается в следующем:
def settings():
global menu_done
global submenu
try:
if v.sport.lower() == "football":
import football.initialize as img
elif v.sport.lower() == "hockey":
import hockey.initialize as img
except:
v.sport = ""
clear()
print("SETTINGS\n", bold=True)
print("Note: Settings will not update until menu is exited.\n", italic=True)
print("1. Sport: " + v.sport)
print("2. Logo")
print("3. Home Name: " + v.home_name)
print("4. Home Standings: " + v.home_standings)
print("5. Home Color: " + str(v.home_color))
print("6. Home Logo")
print("7. Guest Name: " + v.guest_name)
print("8. Guest Standings: " + v.guest_standings)
print("9. Guest Color: " + str(v.guest_color))
print("10. Guest Logo")
print("11. Possession Position: " + v.possession_position)
print("\n12. Return")
print("13. Exit")
while True:
if menu_done:
submenu = 0
break
input(characters="numbers")
if submenu < 1 or submenu > 13:
print("Please input a numbered option (1 - 13).")
else:
break
#Sport
if submenu == 1:
clear()
print("SETTINGS\n", bold=True)
print("Choose Sport\n")
print("1. Football")
print("2. Hockey")
print("3. Return")
while True:
if menu_done:
submenu = 0
break
else:
input(characters="numbers")
if submenu < 1 or submenu > 3:
print("Please input a numbered option (1 - 3).")
else:
break
if submenu == 3:
settings()
elif submenu == 1 or submenu == 2:
print("\nThis setting requires a program restart, your scores will not be saved.\n")
print("Would you like to continue with the restart?\n")
print("1. Yes, Restart")
print("2. Return")
while True:
if menu_done:
break
input(characters="numbers")
if submenu == 1:
if submenu == 1:
v.sport = "Football"
elif submenu == 2:
v.sport = "Hockey"
write(v.sport, 2)
v.restart = True
v.done = True
menu_done = True
elif submenu == 2:
settings()
else:
submenu = "Please input a numbered option (1, 2)."
print_input()
#Logo
elif submenu == 2:
clear()
print("SETTINGS\n", bold=True)
print("Choose A New Logo\n")
if not menu_done:
if v.open_image("assets/logo.png", 86):
img.logo_img = pygame.transform.scale(pygame.image.load('assets/logo.png'), (86, 86))
else:
submenu = "ERROR: Please select an image file (.png, .jpg, .jpeg, .gif)"
print_input()
time.sleep(2)
submenu = ""
settings()
#Home Name
elif submenu == 3:
clear()
print("SETTINGS\n", bold=True)
print("Enter New Home Name")
print("<12 characters recommended\n")
print("1. Return")
if not menu_done:
input()
if submenu == "1":
settings()
else:
v.home_name = submenu
write(v.home_name, 5)
settings()
#Home Standings
elif submenu == 4:
clear()
print("SETTINGS\n", bold=True)
print("Enter New Home Standings\n")
print("\"#-#\" or \"#-#-#\"\n")
print("1. Return")
if not menu_done:
input()
if submenu == "1":
settings()
else:
v.home_standings = submenu
write(v.home_standings, 8)
settings()
#Home Color
elif submenu == 5:
clear()
print("SETTINGS\n", bold=True)
print("Enter New Home Color\n")
print("Color Window Will Open (Close All Windows Before Continuing)\n")
root = tkinter.Tk()
col = askcolor(color=v.home_color, parent=None, title="Home Color", alpha=False)
root.mainloop()
if col[0] is not None:
write(str(col[0]), 11)
v.home_color = col[0]
v.home_dark_color = list()
for x in range(3):
if v.home_color[x] >= 30:
v.home_dark_color.append(v.home_color[x] - 30)
else:
v.home_dark_color.append(0)
settings()
# if not menu_done:
# input()
# if submenu == "1":
# settings()
# else:
# while True:
# try:
# v.home_color = submenu
# write(str(v.home_color), 11)
# v.home_color = v.home_color.replace("(", "")
# v.home_color = v.home_color.replace(")", "")
# v.home_color = (int(v.home_color.split(",")[0]), int(v.home_color.split(",")[1]), int(v.home_color.split(",")[2]))
# v.home_dark_color = list()
# for x in range(3):
# if v.home_color[x] >= 30:
# v.home_dark_color.append(v.home_color[x] - 30)
# else:
# v.home_dark_color.append(0)
# settings()
# break
# except:
# print("\nPlease use format \"#, #, #\"")
# input()
#Home Logo
elif submenu == 6:
clear()
print("SETTINGS\n", bold=True)
print("Choose A New Home Logo\n")
if not menu_done:
if v.open_image("assets/home_logo.png", 45):
img.home_logo_img = pygame.transform.scale(pygame.image.load('assets/home_logo.png'), (45, 45))
else:
submenu = "ERROR: Please select an image file (.png, .jpg, .jpeg, .gif)"
print_input()
time.sleep(2)
submenu = ""
settings()
#Guest Name
elif submenu == 7:
clear()
print("SETTINGS\n", bold=True)
print("Enter New Guest Name")
print("<12 characters recommended\n")
print("1. Return")
if not menu_done:
input()
if submenu == "1":
settings()
else:
v.guest_name = submenu
write(v.guest_name, 14)
settings()
#Guest Standings
elif submenu == 8:
clear()
print("SETTINGS\n", bold=True)
print("Enter New Guest Standings")
print("\"#-#\" or \"#-#-#\"\n")
print("1. Return")
if not menu_done:
input()
if submenu == "1":
settings()
else:
v.guest_standings = submenu
write(v.guest_standings, 17)
settings()
#Guest Color
elif submenu == 9:
clear()
print("SETTINGS\n", bold=True)
print("Enter New Guest Color\n")
print("Color Window Will Open (Close All Windows Before Continuing)\n")
root = tkinter.Tk()
col = askcolor(color=v.guest_color, parent=None, title="Guest Color", alpha=False)
root.mainloop()
if col[0] is not None:
write(str(col[0]), 11)
v.guest_color = col[0]
v.guest_dark_color = list()
for x in range(3):
if v.guest_color[x] >= 30:
v.guest_dark_color.append(v.guest_color[x] - 30)
else:
v.guest_dark_color.append(0)
settings()
#Guest Logo
elif submenu == 10:
clear()
print("SETTINGS\n", bold=True)
print("Choose A New Guest Logo\n")
if not menu_done:
if v.open_image("assets/guest_logo.png", 45):
img.guest_logo_img = pygame.transform.scale(pygame.image.load('assets/guest_logo.png'), (45, 45))
else:
submenu = "ERROR: Please select an image file (.png, .jpg, .jpeg, .gif)"
print_input()
time.sleep(2)
submenu = ""
settings()
#Possession Position
elif submenu == 11:
clear()
print("SETTINGS\n", bold=True)
print("Choose a Possession Position")
print("(For Football Only)\n")
print("1. Top (recommended)")
print("2. Bottom")
print("3. None")
print("4. Return")
while True:
if menu_done:
break
input(characters="numbers")
if submenu == 4:
settings()
elif submenu == 1 or submenu == 2 or submenu == 3:
if submenu == 1:
v.possession_position = "top"
elif submenu == 2:
v.possession_position = "bottom"
elif submenu == 3:
v.possession_position = "none"
write(v.possession_position, 23)
settings()
break
else:
print("Please input a numbered option (1, 2, 3, 4).")
#Return
elif submenu == 12:
menu()
#Exit
elif submenu == 13:
menu_done = True
Вот полный файл в проекте:
import pygame
import default as v
#import os
import time
#import webbrowser
import tkinter
import tkinter.ttk
from tkcolorpicker import askcolor
#Primary Menu Functions
def menu():
global menu_done
global submenu
menu_done = False
clear()
print("MENU\n", bold=True)
print("1. Instructions")
print("2. History")
print("3. Settings")
print("4. Quit Scoreboard")
print("5. Exit")
while True:
if menu_done:
break
input(characters="numbers")
if submenu == 1:
instructions()
elif submenu == 2:
history()
elif submenu == 3:
settings()
elif submenu == 4:
quit()
elif submenu == 5:
menu_done = True
break
else:
submenu = "Please input a numbered option (1 - 5)."
print_input()
def instructions():
global menu_done
global submenu
clear()
print("INSTRUCTIONS\n", bold=True)
print("Instructions Window Will Open (Close Before Continuing)")
#webbrowser.open(os.getcwd() + "/assets/ReadMe.txt")
root = tkinter.Tk()
root.title("Instructions")
S = tkinter.Scrollbar(root)
T = tkinter.Text(root, height=34, width=110)
S.pack(side="right", fill="y")
T.pack(side="left", fill="y")
S.config(command=T.yview)
T.config(yscrollcommand=S.set)
T.insert("end", open("assets/ReadMe.txt").read())
tkinter.mainloop()
menu()
def history():
global menu_done
global submenu
clear()
print("HISTORY", bold=True)
print(v.history)
print("\n1. Return")
print("2. Exit")
while True:
if menu_done:
break
input(characters="numbers")
if submenu == 1:
menu()
break
elif submenu == 2:
menu_done = True
break
else:
submenu = "Please input a numbered option (1, 2)."
print_input()
def settings():
global menu_done
global submenu
try:
if v.sport.lower() == "football":
import football.initialize as img
elif v.sport.lower() == "hockey":
import hockey.initialize as img
except:
v.sport = ""
clear()
print("SETTINGS\n", bold=True)
print("Note: Settings will not update until menu is exited.\n", italic=True)
print("1. Sport: " + v.sport)
print("2. Logo")
print("3. Home Name: " + v.home_name)
print("4. Home Standings: " + v.home_standings)
print("5. Home Color: " + str(v.home_color))
print("6. Home Logo")
print("7. Guest Name: " + v.guest_name)
print("8. Guest Standings: " + v.guest_standings)
print("9. Guest Color: " + str(v.guest_color))
print("10. Guest Logo")
print("11. Possession Position: " + v.possession_position)
print("\n12. Return")
print("13. Exit")
while True:
if menu_done:
submenu = 0
break
input(characters="numbers")
if submenu < 1 or submenu > 13:
print("Please input a numbered option (1 - 13).")
else:
break
#Sport
if submenu == 1:
clear()
print("SETTINGS\n", bold=True)
print("Choose Sport\n")
print("1. Football")
print("2. Hockey")
print("3. Return")
while True:
if menu_done:
submenu = 0
break
else:
input(characters="numbers")
if submenu < 1 or submenu > 3:
print("Please input a numbered option (1 - 3).")
else:
break
if submenu == 3:
settings()
elif submenu == 1 or submenu == 2:
print("\nThis setting requires a program restart, your scores will not be saved.\n")
print("Would you like to continue with the restart?\n")
print("1. Yes, Restart")
print("2. Return")
while True:
if menu_done:
break
input(characters="numbers")
if submenu == 1:
if submenu == 1:
v.sport = "Football"
elif submenu == 2:
v.sport = "Hockey"
write(v.sport, 2)
v.restart = True
v.done = True
menu_done = True
elif submenu == 2:
settings()
else:
submenu = "Please input a numbered option (1, 2)."
print_input()
#Logo
elif submenu == 2:
clear()
print("SETTINGS\n", bold=True)
print("Choose A New Logo\n")
if not menu_done:
if v.open_image("assets/logo.png", 86):
img.logo_img = pygame.transform.scale(pygame.image.load('assets/logo.png'), (86, 86))
else:
submenu = "ERROR: Please select an image file (.png, .jpg, .jpeg, .gif)"
print_input()
time.sleep(2)
submenu = ""
settings()
#Home Name
elif submenu == 3:
clear()
print("SETTINGS\n", bold=True)
print("Enter New Home Name")
print("<12 characters recommended\n")
print("1. Return")
if not menu_done:
input()
if submenu == "1":
settings()
else:
v.home_name = submenu
write(v.home_name, 5)
settings()
#Home Standings
elif submenu == 4:
clear()
print("SETTINGS\n", bold=True)
print("Enter New Home Standings\n")
print("\"#-#\" or \"#-#-#\"\n")
print("1. Return")
if not menu_done:
input()
if submenu == "1":
settings()
else:
v.home_standings = submenu
write(v.home_standings, 8)
settings()
#Home Color
elif submenu == 5:
clear()
print("SETTINGS\n", bold=True)
print("Enter New Home Color\n")
print("Color Window Will Open (Close All Windows Before Continuing)\n")
root = tkinter.Tk()
col = askcolor(color=v.home_color, parent=None, title="Home Color", alpha=False)
root.mainloop()
if col[0] is not None:
write(str(col[0]), 11)
v.home_color = col[0]
v.home_dark_color = list()
for x in range(3):
if v.home_color[x] >= 30:
v.home_dark_color.append(v.home_color[x] - 30)
else:
v.home_dark_color.append(0)
settings()
# if not menu_done:
# input()
# if submenu == "1":
# settings()
# else:
# while True:
# try:
# v.home_color = submenu
# write(str(v.home_color), 11)
# v.home_color = v.home_color.replace("(", "")
# v.home_color = v.home_color.replace(")", "")
# v.home_color = (int(v.home_color.split(",")[0]), int(v.home_color.split(",")[1]), int(v.home_color.split(",")[2]))
# v.home_dark_color = list()
# for x in range(3):
# if v.home_color[x] >= 30:
# v.home_dark_color.append(v.home_color[x] - 30)
# else:
# v.home_dark_color.append(0)
# settings()
# break
# except:
# print("\nPlease use format \"#, #, #\"")
# input()
#Home Logo
elif submenu == 6:
clear()
print("SETTINGS\n", bold=True)
print("Choose A New Home Logo\n")
if not menu_done:
if v.open_image("assets/home_logo.png", 45):
img.home_logo_img = pygame.transform.scale(pygame.image.load('assets/home_logo.png'), (45, 45))
else:
submenu = "ERROR: Please select an image file (.png, .jpg, .jpeg, .gif)"
print_input()
time.sleep(2)
submenu = ""
settings()
#Guest Name
elif submenu == 7:
clear()
print("SETTINGS\n", bold=True)
print("Enter New Guest Name")
print("<12 characters recommended\n")
print("1. Return")
if not menu_done:
input()
if submenu == "1":
settings()
else:
v.guest_name = submenu
write(v.guest_name, 14)
settings()
#Guest Standings
elif submenu == 8:
clear()
print("SETTINGS\n", bold=True)
print("Enter New Guest Standings")
print("\"#-#\" or \"#-#-#\"\n")
print("1. Return")
if not menu_done:
input()
if submenu == "1":
settings()
else:
v.guest_standings = submenu
write(v.guest_standings, 17)
settings()
#Guest Color
elif submenu == 9:
clear()
print("SETTINGS\n", bold=True)
print("Enter New Guest Color\n")
print("Color Window Will Open (Close All Windows Before Continuing)\n")
root = tkinter.Tk()
col = askcolor(color=v.guest_color, parent=None, title="Guest Color", alpha=False)
root.mainloop()
if col[0] is not None:
write(str(col[0]), 11)
v.guest_color = col[0]
v.guest_dark_color = list()
for x in range(3):
if v.guest_color[x] >= 30:
v.guest_dark_color.append(v.guest_color[x] - 30)
else:
v.guest_dark_color.append(0)
settings()
#Guest Logo
elif submenu == 10:
clear()
print("SETTINGS\n", bold=True)
print("Choose A New Guest Logo\n")
if not menu_done:
if v.open_image("assets/guest_logo.png", 45):
img.guest_logo_img = pygame.transform.scale(pygame.image.load('assets/guest_logo.png'), (45, 45))
else:
submenu = "ERROR: Please select an image file (.png, .jpg, .jpeg, .gif)"
print_input()
time.sleep(2)
submenu = ""
settings()
#Possession Position
elif submenu == 11:
clear()
print("SETTINGS\n", bold=True)
print("Choose a Possession Position")
print("(For Football Only)\n")
print("1. Top (recommended)")
print("2. Bottom")
print("3. None")
print("4. Return")
while True:
if menu_done:
break
input(characters="numbers")
if submenu == 4:
settings()
elif submenu == 1 or submenu == 2 or submenu == 3:
if submenu == 1:
v.possession_position = "top"
elif submenu == 2:
v.possession_position = "bottom"
elif submenu == 3:
v.possession_position = "none"
write(v.possession_position, 23)
settings()
break
else:
print("Please input a numbered option (1, 2, 3, 4).")
#Return
elif submenu == 12:
menu()
#Exit
elif submenu == 13:
menu_done = True
def quit():
global menu_done
global submenu
menu_done = False
clear()
print("QUIT\n", bold=True)
print("Are you sure you want to quit? Your work will not be saved.\n")
print("1. Yes, Quit")
print("2. Return")
print("3. Exit")
while True:
if menu_done:
break
input(characters="numbers")
if submenu == 1:
v.done = True
v.restart = False
menu_done = True
break
elif submenu == 2:
menu()
break
elif submenu == 3:
menu_done = True
break
else:
submenu = "Please input a numbered option (1 - 3)."
print_input()
#Simple Action Functions
def clear():
global text_line
global submenu
global submenu_go
pygame.draw.rect(v.screen, (255, 255, 255), [0, 0, 1235, 559]) #[x position, y position, width, height]
pygame.display.flip() #Refresh Screen
text_line = 0
submenu = ""
submenu_go = False
def print(text, **kwargs):
global text_line
font_menu = pygame.font.SysFont('Courier New', 18, bold=kwargs.get("bold", None), italic=kwargs.get("italic", None))
for line in text.split("\n"):
menu1 = font_menu.render(line, True, (0, 0, 0))
v.screen.blit(menu1, (617 - (menu1.get_rect().width/2), text_line*18))
pygame.display.flip() #Refresh Screen
text_line += 1
def input(**kwargs):
global submenu_go
while not submenu_go:
menu_check_events(characters=kwargs.get("characters", None))
submenu_go = False
def print_input():
global text_line
global submenu
pygame.draw.rect(v.screen, (255, 255, 255), [0, (text_line + 1) * 18, 1235, 18])
font_menu = pygame.font.SysFont('Courier New', 18)
menu1 = font_menu.render(submenu, True, (0, 0, 0))
v.screen.blit(menu1, (617 - (menu1.get_rect().width/2), (text_line + 1) * 18))
pygame.display.flip() #Refresh Screen
def write(string, line):
with open("assets/settings/Settings.txt") as settings:
config = settings.readlines()
file = open("assets/settings/Settings.txt","w")
for re_line in range(0, line - 1):
file.write(config[re_line])
file.write(string + "\n")
for re_line in range(line, len(config)):
file.write(config[re_line])
def menu_check_events(**kwargs):
global menu_done
global submenu
global submenu_go
characters = kwargs.get("characters", None)
for event in pygame.event.get(): #Event Occurs
if event.type == pygame.QUIT:
quit()
elif event.type == pygame.KEYDOWN: #Key Pressed
try:
if "Please" in submenu:
submenu = ""
except:
pass
if event.key == pygame.K_ESCAPE: #Escape Key
menu_done = True
submenu_go = True
elif event.key == pygame.K_RETURN:
if submenu != "":
if characters == "numbers":
submenu = int(submenu)
submenu_go = True
elif event.key == pygame.K_BACKSPACE:
submenu = submenu[:-1]
print_input()
else:
try:
if -1 < int(event.unicode) < 10:
submenu += event.unicode
print_input()
except:
if not characters == "numbers":
submenu += event.unicode
print_input()