Foros del Web » Programando para Internet » Python »

Problema al utilizar cx_Freeze

Estas en el tema de Problema al utilizar cx_Freeze en el foro de Python en Foros del Web. Buenas, estoy intentando convertir a .exe un juego que tengo. Tengo varias preguntas: 1.- En todos los vídeos y páginas que he visto en las ...
  #1 (permalink)  
Antiguo 28/03/2015, 05:55
Avatar de 12trunks12  
Fecha de Ingreso: noviembre-2014
Mensajes: 41
Antigüedad: 10 años
Puntos: 1
Problema al utilizar cx_Freeze

Buenas, estoy intentando convertir a .exe un juego que tengo. Tengo varias preguntas:

1.- En todos los vídeos y páginas que he visto en las que utilizaban cx_Freeze o py2exe solo convertían a .exe el archivo .py, pero si tengo imágenes y carpetas que el archivo.py necesita? Como hago para incluirlas en la compilación?

2.- Bueno yo uso Windows XP y cuando creo el .exe(del archivo.py solo) se abre el símbolo del sistema y se cierra enseguida, como cuando haces ejecutas directamente un archivo.py. Hay algo que deba hacer para que ese .exe se ejecute normal?
  #2 (permalink)  
Antiguo 29/03/2015, 13:36
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 8 meses
Puntos: 1360
Respuesta: Problema al utilizar cx_Freeze

Cita:
Iniciado por 12trunks12 Ver Mensaje
1.- En todos los vídeos y páginas que he visto en las que utilizaban cx_Freeze o py2exe solo convertían a .exe el archivo .py, pero si tengo imágenes y carpetas que el archivo.py necesita? Como hago para incluirlas en la compilación?
En la documentación de py2exe hay un ejemplo completo. En lo personal dejaria un archivo de configuración en la misma ruta del .exe y ahí pondría las rutas u otros datos que necesite.

http://www.py2exe.org/index.cgi/data_files

Cita:
Iniciado por 12trunks12 Ver Mensaje
2.- Bueno yo uso Windows XP y cuando creo el .exe(del archivo.py solo) se abre el símbolo del sistema y se cierra enseguida, como cuando haces ejecutas directamente un archivo.py. Hay algo que deba hacer para que ese .exe se ejecute normal?
Primero que nada mi mas sentido pésame por estar usando windows xp.

Segundo guarda tu archivo con la extensión .pyw y dale doble click.
Para "compilarlo" en modo windows cambia en tu script.

Código Python:
Ver original
  1. from distutils.core import setup
  2. import py2exe
  3. setup(console=['app.py'])

a esto.

Código Python:
Ver original
  1. from distutils.core import setup
  2. import py2exe
  3. setup(windows=['app.py'])

También puedes usar en caso que se te dificulte GUI2EXE https://code.google.com/p/gui2exe/
  #3 (permalink)  
Antiguo 29/03/2015, 14:36
Avatar de 12trunks12  
Fecha de Ingreso: noviembre-2014
Mensajes: 41
Antigüedad: 10 años
Puntos: 1
Respuesta: Problema al utilizar cx_Freeze

Buenas, he seguido lo que decía en el tutorial y he escrito esto:
Código Python:
Ver original
  1. # -*- coding: utf-8 -*-
  2. import os
  3. from distutils.core import setup
  4. import py2exe
  5.  
  6. archivos = ['C:\Documents and Settings\Anxo.CASA1\Escritorio\Anxo\Python\Objetos\Ahorcado\fallo0.png',
  7.             'C:\Documents and Settings\Anxo.CASA1\Escritorio\Anxo\Python\Objetos\Ahorcado\rae.txt']
  8. for carpeta in os.listdir("C:\Documents and Settings\Anxo.CASA1\Escritorio\Anxo\Python\Objetos\Ahorcado\Imagenes"):
  9.     for archivo in carpeta:
  10.         f1 = 'C:\Documents and Settings\Anxo.CASA1\Escritorio\Anxo\Python\Objetos\Ahorcado\Imagenes' + carpeta + archivo
  11.         if os.path.isfile(f1):
  12.             f2 = 'images', [f1]
  13.             archivos.append(f2)
  14.  
  15. setup(
  16.     console= ['ahorcado.py'],
  17.     data_files = archivos,
  18.     options={
  19.                 "py2exe":{
  20.                         "unbuffered": True,
  21.                         "optimize": 2,
  22.                 }
  23.         }
  24. )

En el bucle he añadido otro bucle porque lo que quiero es añadir las imágenes que están divididas en 3 carpetas dentro de una misma carpeta (Carpeta --> Carpetas con ímagenes).
Además al principio he añadido unas rutas que son de archivos que están en la misma altura que el .py (aunque creo que esto no importa xD).
Y bueno como es natural escribiendo esto he tenido un error:


Aclaro que me ha creado la carpeta dist pero no la build, y que tanto el setup.py y el archivo principal (ahorcado.py) están en la carpeta de Python34
  #4 (permalink)  
Antiguo 29/03/2015, 20:46
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 8 meses
Puntos: 1360
Respuesta: Problema al utilizar cx_Freeze

Bueno un par de cosas.

1. En documentación tiene los separadores de directorios como /, mientras que tu tienes \ solo que si vas a usar \, no olvides añadir r al principio.
Por ejemplo en lugar de:

Código Python:
Ver original
  1. 'C:\Documents and Settings\Anxo.CASA1\Escritorio\Anxo\Python\Objetos\Ahorcado\fallo0.png'

Debería ser:
Código Python:
Ver original
  1. r'C:\Documents and Settings\Anxo.CASA1\Escritorio\Anxo\Python\Objetos\Ahorcado\fallo0.png'

2. Obviamente te da ese error porque espera una lista de tuplas de 2 y tu estas poniendo solo cadenas. Ademas estas añadiendo un segundo for que no viene en el ejemplo WTF?!

Si tienes dudas de que regresa o que estas haciendo tienes varias opciones:
1. Usar un debugger. Ni siquiera tiene que ser sofisticado, hasta puede ser un print.
2. Leer la documentación.


Código Python:
Ver original
  1. import os
  2.  
  3. archivos = [
  4.     ('texto', [r'C:\Documents and Settings\Anxo.CASA1\Escritorio\Anxo\Python\Objetos\Ahorcado\fallo0.png']),
  5.     ('texto', [r'C:\Documents and Settings\Anxo.CASA1\Escritorio\Anxo\Python\Objetos\Ahorcado\rae.txt']),
  6. ]
  7.  
  8. path = r"C:\Documents and Settings\Anxo.CASA1\Escritorio\Anxo\Python\Objetos\Ahorcado\Imagenes"
  9. for carpeta in os.listdir(path):
  10.     f1 = os.path.join(path, carpeta)
  11.     if os.path.isfile(f1):
  12.         f2 = 'images', [f1]
  13.         print(f2)


Por ultimo me sorprendió que no usaras la función mágica que esta definida mas abajo, se ve que esta mejor hecha.
  #5 (permalink)  
Antiguo 30/03/2015, 05:18
Avatar de 12trunks12  
Fecha de Ingreso: noviembre-2014
Mensajes: 41
Antigüedad: 10 años
Puntos: 1
Respuesta: Problema al utilizar cx_Freeze

Bueno,:

1. Es cierto, se me olvidó poner eso, tambien se podría poniendo doble barra no?
Código Python:
Ver original
  1. 'C:\\Documents and Settings\\Anxo.CASA1\\Escritorio\\Anxo\\Python\\Objetos\\Ahorcado\\fallo0.png'

Edito: 2. Ya me di cuenta de que es lo que espera 2 valores y ya vi que me faltaba en los archivos que puse previamente del for poner la tupla
Y sobre el segundo for es porque ,como dije ya en el otro comentario, tengo una carpeta llamada 'Imagenes' y dentro de ella tengo otras 3 carpetas con las imágenes y poniendo solo un for solo conseguiría o elegir lo que hay dentro de 'Imagenes' (3 carpetas) o lo que hay dentro de 1 sola carpeta (poniendo al ruta directamente a esa carpeta). Tu hiciste eso pero poniendo previamente la variable path (lo que sería 'Imagenes') y después hacerle un for. Y ahora me doy cuenta de que tu lo que estás haciendo es añadir la carpeta entera en vez de ir añadiendo imagen a imagen...

Y lo último pues la verdad es que no entiendo esa función xD

PD: Ya no me da ningún error pero no me compila las carpetas con ímagenes y solo me crear la carpeta dist.
Este es mi código actual:
Código Python:
Ver original
  1. # -*- coding: utf-8 -*-
  2. import os
  3. from distutils.core import setup
  4. import py2exe
  5.  
  6. archivos = [
  7.     ('imagen fallo0', [r'C:\Documents and Settings\Anxo.CASA1\Escritorio\Anxo\Python\Objetos\Ahorcado\fallo0.png']),
  8.     ('diccionario español', [r'C:\Documents and Settings\Anxo.CASA1\Escritorio\Anxo\Python\Objetos\Ahorcado\rae.txt']),
  9. ]
  10.  
  11. path = r"C:\Documents and Settings\Anxo.CASA1\Escritorio\Anxo\Python\Objetos\Ahorcado\Imagenes"
  12. for carpeta in os.listdir(path):
  13.     f1 = os.path.join(path, carpeta)
  14.     if os.path.isfile(f1):
  15.         f2 = 'images', [f1]
  16.         print(f2)
  17.  
  18. setup(
  19.     console= ['ahorcado.py'],
  20.     data_files = archivos,
  21.     options={
  22.                 "py2exe":{
  23.                         "unbuffered": True,
  24.                         "optimize": 2,
  25.                 }
  26.         }
  27. )
Y a parte tengo una duda, en el dist me crea una carpeta para el fallo0.png y para el rae.txt, cuando yo lo que tengo es el archivo.py en la misma ruta que fallo0.png y rae.txt, el ejecutable funcionaría bien?

Última edición por 12trunks12; 30/03/2015 a las 05:39
  #6 (permalink)  
Antiguo 30/03/2015, 08:09
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 8 meses
Puntos: 1360
Respuesta: Problema al utilizar cx_Freeze

Bueno pues obviamente no lo estas añadiendo a la lista de archivos (lineas 15-16), así pues como.
  #7 (permalink)  
Antiguo 30/03/2015, 14:35
Avatar de 12trunks12  
Fecha de Ingreso: noviembre-2014
Mensajes: 41
Antigüedad: 10 años
Puntos: 1
Respuesta: Problema al utilizar cx_Freeze

Dios soy retrasado... xD. Bueno ya le he añadido el append y sigue creando solo la carpeta dist. Ahora respecto a cuando no tenia el append hay una carpeta llamada images (hasta ahí bien) pero dentro hay un único archivo .db que se llama thumbs, está bien eso? Porque sigo sin ver las imágenes...

Etiquetas: gui
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:30.