Foros del Web » Programando para Internet » Python »

Como cargar un recurso empaquetado con py2exe?

Estas en el tema de Como cargar un recurso empaquetado con py2exe? en el foro de Python en Foros del Web. Hola, mi problema es que tengo varios recursos que quiero cargar del exe y guardarlos en el disco duro (algo asi como un instalador) pero ...
  #1 (permalink)  
Antiguo 12/09/2012, 10:28
Avatar de shujidan  
Fecha de Ingreso: abril-2011
Mensajes: 121
Antigüedad: 13 años, 3 meses
Puntos: 5
Como cargar un recurso empaquetado con py2exe?

Hola, mi problema es que tengo varios recursos que quiero cargar del exe y guardarlos en el disco duro (algo asi como un instalador) pero no estoy muy seguro de como hacerlo o que librerias usar, espero que alguien me pueda ayudar.
  #2 (permalink)  
Antiguo 12/09/2012, 11:24
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 4 meses
Puntos: 1360
Respuesta: Como cargar un recurso empaquetado con py2exe?

Te recomiendo fuertemente que mejores tu pregunta, porque con esos datos tan generales lo único que te podemos ayudar es con una respuesta general.

Trata de responder las siguientes preguntas:
¿Que intentas hacer?
¿Como lo estas haciendo?
¿Que resultado obtienes?
¿Que errores obtienes?
  #3 (permalink)  
Antiguo 12/09/2012, 11:34
Avatar de shujidan  
Fecha de Ingreso: abril-2011
Mensajes: 121
Antigüedad: 13 años, 3 meses
Puntos: 5
Respuesta: Como cargar un recurso empaquetado con py2exe?

Ok, intento empaquetar un archivo cualquiera dentro de mi programa todo dentro de un exe, no estoy muy seguro de que librerias usar para cargar este archivo del exe y guardarlo en la PC, por ahi he visto que se puede lograr con librerias como pyglet pero ando todavia muy perdido y no se como hacerlo, lo he intentado cargar de esta forma pero el archivo que se guarda es inservible y pesa mucho mas de lo que deberia:
Código Python:
Ver original
  1. import pyglet
  2. data_file = pyglet.resource.file('archivo_cualquiera.dat')
  3. file = open(r'C:\Users\home\Desktop\archivo_cualquiera.dat','w')
  4. file.write(data_file)
  5. file.close()

Asi es como lo empaqueto con el py2exe:
Código Python:
Ver original
  1. from distutils.core import setup
  2. import py2exe
  3.  
  4. setup(name="Aplicacion de ejemplo",
  5.         version="0.1",
  6.         license="GPL",
  7.         scripts=["programa.py"],
  8.         console=[{'script': "programa.py",
  9.                 'other_resources': [(u"VERSION",1,"ver 1")]
  10.                 }],
  11.         data_files = [('', ['archivo_cualquiera.dat'])],
  12.         options={"py2exe": {"bundle_files": 1}},
  13.         zipfile = None
  14. )

Última edición por shujidan; 12/09/2012 a las 11:39
  #4 (permalink)  
Antiguo 12/09/2012, 11:59
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 4 meses
Puntos: 1360
Respuesta: Como cargar un recurso empaquetado con py2exe?

Checando un poco la opción data_files me di cuenta que esto es mas o menos lo que tratas de hacer.


Código Python:
Ver original
  1. with open("mi_archivo.txt", "rb") as f:
  2.     data = f.read()

Código Python:
Ver original
  1. from distutils.core import setup
  2. import py2exe
  3.  
  4. Mydata_files = [('', ['c:/path/to/mi_archivo.txt'])]
  5.  
  6. setup(
  7.     console=['trypyglet.py.py']
  8.     data_files = Mydata_files
  9.     options={
  10.                 "py2exe":{
  11.                         "unbuffered": True,
  12.                         "optimize": 2,
  13.                         "excludes": ["email"]
  14.                 }
  15.         }
  16. )

En tus script trata siempre de manejar la rutas de tus recursos como relativos. O si es un proyecto establecido obtener la ruta absoluta y concatenar el nombre de tus archivos.
  #5 (permalink)  
Antiguo 12/09/2012, 12:11
Avatar de shujidan  
Fecha de Ingreso: abril-2011
Mensajes: 121
Antigüedad: 13 años, 3 meses
Puntos: 5
Respuesta: Como cargar un recurso empaquetado con py2exe?

Gracias por tu respuesta razpeitia
El archivo_cualquiera.dat carga correctamente pero solo si esta fuera del exe, creo que estoy haciendo mal el setup.py porque debe haber alguna forma de que el archivo_cualquiera quede dentro del exe y luego leerlo con la libreria de pyglet aunque solo puedo hacer que lo lea cuando esta fuera tambien así que creo que no es el camino que debo tomar.

EDIT: Creo que el archivo queda dentro del exe cuando lo empaqueto con este script pero pues no puedo estar seguro ya que no lo puedo leer aún (el pyglet no lo encuentra porque solo lo busca fuera del exe):
Código Python:
Ver original
  1. setup(name="Aplicacion de ejemplo",
  2.         version="0.1",
  3.         license="GPL",
  4.         scripts=["programa.py"],
  5.         console=[{'script': "programa.py",
  6.                 'other_resources': [(u"VERSION",1,"ver 1"),(u"ARCHIVO",1,r"C:\Users\home\Desktop\archivo.dat")]
  7.                 }],
  8.         options={"py2exe": {"bundle_files": 1}},
  9.         zipfile = None
  10. )

Última edición por shujidan; 13/09/2012 a las 16:00
  #6 (permalink)  
Antiguo 14/09/2012, 10:57
Avatar de shujidan  
Fecha de Ingreso: abril-2011
Mensajes: 121
Antigüedad: 13 años, 3 meses
Puntos: 5
Respuesta: Como cargar un recurso empaquetado con py2exe?

La única forma con la que logré empaquetar el exe fué convirtiendolo en un string mediante la libreria binascii para así guardarlo junto con el script y luego desencodearlo aunque me hubiera gustado mas haber usado el recurso tal cual. De esta forma el binario algunas veces pesa mas del doble del original.
EDIT. PyInstaller rules, mejor documentación con respecto a esto.

Última edición por shujidan; 17/10/2012 a las 15:17

Etiquetas: empaquetado, gui, recurso
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 03:05.