Tengo un problema con pyinstaller al agregar algunos archivos de datos como imágenes y txts al programa Python. Por ejemplo, he creado una barra de herramientas con íconos, y los almaceno en una carpeta separada llamada imágenes. También tengo algunos archivos txt y xml para almacenar algunas configuraciones. Estos archivos txt ant xml se almacenan en otra carpeta llamada data_files. Todos los archivos py se almacenan en otra carpeta llamada source.Construir imágenes y algunos archivos de configuración como archivos txt y xml con pyinstaller
Cuando intento crear este programa python con pyinstaller, pyinstaller puede construir correctamente toda la carpeta de origen, pero las carpetas images y data_files no pueden compilarse. Revisé la documentación de pyinstaller pero no pude encontrar ninguna solución. He realizado muchas búsquedas en Google y he encontrado que el único recurso this es útil, pero este es un recurso muy inadecuado.
Mi pregunta principal es: ¿cómo puedo construir un archivo exe con una carpeta construida por separado, como imágenes y confs, usando el instalador de pizarras?
Edit: Encontré la solución. Cuando crea el archivo de especificación, tiene que a.datas parámetro.
# -*- mode: python -*-
a = Analysis([os.path.join(HOMEPATH,'support/_mountzlib.py'), os.path.join(HOMEPATH,'support/useUnicode.py'), '/home/vmode/Desktop/derlem2/sources/TextSTAT.py'],
pathex=['/home/pyinstaller'])
a.datas += [("Images/New.gif","/home/vmode/Desktop/derlem2/Images/New.gif","DATA")]
a.datas += [("Images/Open.gif","/home/vmode/Desktop/derlem2/Images/Open.gif","DATA")]
a.datas += [("Images/Column.gif","/home/vmode/Desktop/derlem2/Images/Column.gif","DATA")]
pyz = PYZ(a.pure)
exe = EXE(pyz,
a.scripts,
a.binaries,
a.zipfiles,
a.datas,
name=os.path.join('dist', 'TextSTAT'),
debug=False,
strip=False,
upx=True,
console=1)
El código de especificación anterior está diseñado para mi proyecto. Como se ve en este código de especificación, he incluido 3 iconos para compilar con el programa python. Cuando se genera el programa, hay un archivo ejecutable independiente con estos iconos incrustados.
Pero, ¿y si tenemos tantos archivos? Supongamos que tenemos 1000 iconos para usar en nuestro programa. Es muy inadecuado escribir a mano el archivo de especificaciones. Debe haber un sistema de bucle para leer el directorio de archivos y agregar estos archivos dinámicamente. Pero no pude encontrar cómo agregar estos archivos dinámicamente. No hay ninguna posibilidad de agregar tantos archivos a mano, creo. Si alguien sabe, por favor comparta.
Pruebe 'cx_freeze'. Intenté 'py2exe',' pyinstaller', algún otro programa aleatorio, y solo 'cx_freeze' funcionó para mí (utilicé PyQt4). Si desea ver mi código para hacer un binario, está en GitHub: https://github.com/Blender3D/Bindery/blob/master/tools/binary.py – Blender
Gracias por su interés. Pero cx_freeze solo crea el archivo .exe. Quiero construir el programa siguiendo todas las plataformas. Entonces tengo que usar el instalador de pizarras. Pero tengo algunos grandes toubles. – user1150508
No, 'cx_freeze' crea binarios para Linux también. Mac requiere Py2app. – Blender