Error trying to package a program with cx_Freeze

2

I would like to know how to convert this file .py in a file .exe since trying to generate it with cx_Freeze gives me an error when executing it:

cx_Freeze: Python error in main script
---------------------------
Traceback (most recent call last):
  File "C:\Users\Angel\Anaconda3\lib\site-packages\cx_Freeze\initscripts\__startup__.py", line 14, in run
    module.run()
  File "C:\Users\Angel\Anaconda3\lib\site-packages\cx_Freeze\initscripts\Console.py", line 26, in run
    exec(code, m.__dict__)
  File "apli.py", line 42, in <module>
RuntimeError: input(): lost sys.stdin

Application code:

from tabulate import tabulate
def menu():
    print("""
    *********************
            Menú
    ********************

    1.- Agregar contacto
    2.- Editar contacto
    3.- Mostrar contactos
    4.- Buscar Contacto
    5.- Salir
    """)
def menu2():
    print("""
    *****************
        Edición
    *****************

    1.- Editar contacto
    2.- Eliminar contacto
    """)
def menu3():
    print("""
    ***************
        Busqueda
    ***************

    1.- Busqueda por Nombre
    2.- Busqueda por Telefono
    3.- Busqueda por dirección
    """)
directorio = []

nombres = {}
telefonos = {}
direcciones = {}

menu()
reboot = 0
while(reboot != 5):
    s_general = int(input("Ingresa tu selección: "))
    if s_general == 1:
        print("Ingrese los datos del contacto:")
        try:
            nombre = input("\nNombre: ")
            for i in range(len(directorio)):
                if nombre in directorio [i][0]:
                    print("\ncontacto encontrado Intente editar el contacto existente")
                    print("\n",directorio[i][0])
                    print("\nTelefono: ",directorio[i][1])
                    print("Dirección: ",directorio[i][2])
                assert nombre!= directorio[i][0]

            while True:
                telefono = input("Telefono: "+"+52 ")
                try:
                    tel2 =telefono
                    int(telefono)
                    assert len(tel2) >= 10
                    break
                except ValueError:
                    print("Este Campo Solo Acepta Números")
                except AssertionError:
                    print("Longitud muy corta")
            for i in range(len(directorio)):
                if telefono in directorio[i][1]:
                    print("\ncontacto encontrado Intente editar el contacto existente")
                    print("\nNombre: ",directorio[i][0])
                    print("Telefono:",directorio[i][1])
                    print("Dirección: ",directorio[i][2])
                assert telefono != directorio[i][1]
            direccion = input("Dirección: ")

            nombres[nombre] = telefono
            telefonos[telefono] = nombre
            direcciones[direccion] = nombre

            directorio.append([nombre,telefono,direccion])
        except AssertionError:
            pass

        menu()
    elif s_general == 2:
        menu2()
        selec_menu2 = int(input("Ingresa tu selección: "))
        if selec_menu2 == 1:
            print("\n \n",tabulate(directorio, headers=['Nombre','Telefono','Dirección'], stralign='center'),"\n \n")
            nom_change = input("Ingrese el nombre del contacto que desea editar: ")
            index = None
            for i in range(len(directorio)):
                if directorio[i][0] == nom_change:
                    index = i
            print("Ingrese solo los datos que desea Editar: ")

            nom_c = input("Nombre: ")
            tel_c = input("Telefono: "+"+52 ")
            dir_c = input("Dirección: ")


            directorio[index] = [
            nom_c if len(nom_c) > 0 else directorio[index][0],
            "+52 "+tel_c if len(tel_c)> 0 else directorio[index][1],
            dir_c if len(dir_c)> 0 else directorio[index][2]
            ]
            if nom_c or tel_c or dir_c in directorio[i][0:2]:
                print("El contacto fue editado")


        elif selec_menu2 == 2:
            print("\n \n",tabulate(directorio, headers=['Nombre','Telefono','Dirección'], stralign='center'),"\n \n")
            nom_delete = input("Ingresa el nombre del contactoa eliminar: ")

            for i in range(len(directorio)):
                if directorio[i][0] == nom_delete:
                    del directorio[i]
                    if nom_delete not in directorio:
                        print("El contaco",nom_delete,"fue eliminado correctamnete ")

        menu()
    elif s_general == 3:
        print("\n")
        if len(directorio) == 0:
            print("El directorio se encuenra vacio por favor Ingrese un contacto")
        else:
            print(tabulate(directorio, headers=['Nombre','Telefono','Dirección'], stralign='center'),"\n \n")

        menu()
    elif s_general == 4:
        try:
            assert directorio != []
            menu3()
            selec_m3 = int(input("Ingresa tu opcion: "))
            if selec_m3 == 1:
                nom_search = input("Ingrese el nombre del contacto: ")
                for i in range(len(directorio)):
                    if directorio[i][0] == nom_search:
                        print("\nNombre: ",directorio[i][0])
                        print("Telefono: ",directorio[i][1])
                        print("Dirección: ",directorio[i][2],"\n")
            elif selec_m3 == 2:
                tel_search = input("Ingresa El numero que deseas buscar: "+"+52 ")
                for i in range(len(directorio)):
                    if tel_search in telefonos:
                        print("\nNombre: ",directorio[i][0])
                        print("Telefono; ",directorio[i][1])
                        print("Dirección: ",directorio[i][2])

            elif selec_m3 == 3:
                dire_search = input("Ingrese la dirección: ")
                for i in range(len(directorio)):
                    if directorio[i][2] == dire_search:
                        print("\nNombre: ",directorio[i][0])
                        print("Telefono: ",directorio[i][1])
                        print("Dirección: ",directorio[i][2],"\n")
        except AssertionError:
            print("\nNo se puede mostrar el directorio\n \nEl directorio se encuentra vacio\n")

        menu()
input()

Code of Setup.py :

import sys 
from cx_Freeze import setup, Executable # Dependencies are automatically zdetected, but it might need fine tuning. 
build_exe_options = {
   "packages": ["os"], 
   "excludes": ["tkinter"]
} 
# GUI applications require a different base on Windows (the default is for a 
# console application). 
base = None 
if sys.platform == "win32": 
   base = "Win32GUI" 
   setup( name = "my prog", version = "1.0", description = "My application!", options = {"build_exe": build_exe_options}, executables = [Executable("prog.py", base = base)]) 
    
asked by Angel Judath Alvarez 17.01.2018 в 23:01
source

1 answer

2

Win32GUI is the configuration for programs that exploit the Windows graphical interface. In this mode, there is no stdin (standard entry), and therefore you can not use input() .

However, from what I see, your code is actually console mode, so the correct configuration in your setup.py should be: base = "console"

    
answered by 29.11.2018 в 17:14