¿Cómo comstackr todos los recursos en un archivo ejecutable?

He escrito la aplicación GTK con python.

Toda la interfaz gráfica de usuario está en el archivo glade, y hay algunas imágenes utilizadas. Deseo comstackr mi aplicación en un archivo ejecutable. Para eso estoy usando el comstackdor PyInstaller y el empaquetador UPX .

Lo he hecho como dice el manual:

python Configure.py python Makespec.py --onefile --windowed --upx /path/to/yourscript.py python Build.py /path/to/yourscript.spec 

PyInstaller funciona perfectamente y crea un archivo exe. Pero para hacer que mi aplicación funcione correctamente, tengo que copiar mis archivos de imagen y glade en la carpeta de exe.

¿Hay alguna manera de comstackr esos archivos en ejecutable?

He editado mi archivo de especificaciones de varias maneras, pero no puedo lograr lo que quiero. El archivo de especificación a continuación solo copia el archivo al directorio, pero no se comstack en el archivo ejecutable

 # -*- mode: python -*- a = Analysis([os.path.join(HOMEPATH,'support\\_mountzlib.py'), os.path.join(HOMEPATH,'support\\useUnicode.py'), 'r:\\connection\\main.py'], pathex=['C:\\Documents and Settings\\Lixas\\Desktop\\pyinstaller-1.5-rc1']) pyz = PYZ(a.pure) exe = EXE( pyz, a.scripts, a.binaries, a.zipfiles, a.datas, name=os.path.join('dist', 'NetworkChecker.exe'), debug=False, strip=False, upx=True, console=False, icon='r:\\connection\\ikona.ico' ) coll = COLLECT( exe, [('gui.glade', 'r:\\connection\\gui.glade', 'DATA')], [('question16.png', 'r:\\connection\\question16.png', 'DATA')], # a.binaries, # strip=False, upx=True, name='distFinal') 

Deseo tener un solo archivo ejecutable con todo incluido en

PyInstaller le permite agrupar todos sus recursos en el exe, sin la dificultad de convertir sus archivos de datos en archivos .py: su objeto COLLECT parece ser correcto, el paso difícil es acceder a estos archivos en tiempo de ejecución. PyInstaller los desempaquetará en un directorio temporal y le dirá dónde están con la variable _MEIPASS2. Para obtener las rutas de archivo en modo de desarrollo y empaquetado, uso esto:

 def resource_path(relative): return os.path.join( os.environ.get( "_MEIPASS2", os.path.abspath(".") ), relative ) # in development >>> resource_path("gui.glade") "/home/shish/src/my_app/gui.glade" # in deployment >>> resource_path("gui.glade") "/tmp/_MEI34121/gui.glade" 

Con unos pocos cambios, puede incorporar todo en su código fuente y, por lo tanto, en su archivo ejecutable.

Si ejecuta gdk-pixbuf-csource en sus archivos de imagen, puede convertirlos en cadenas, que luego puede cargar usando gtk.gdk.pixbuf_new_from_inline() .

También puede incluir su archivo Glade como una cadena en el progtwig y luego cargarlo usando gtk.Builder.add_from_string() .

¿Hay alguna manera de comstackr esos archivos en ejecutable?

Estrictamente hablando: no, porque comstacks el código fuente , mientras que el archivo glade es XML y las imágenes son datos binarios. Lo que normalmente haría es crear un instalador (es decir, un archivo de autoempaquetado que colocará diferentes archivos en los directorios correctos cuando se ejecute el instalador).

EDITAR: Si su preocupación es simplemente tener un ejecutable de un solo archivo (de modo que no se trata de “comstackr”, sino realmente de la cantidad de archivos que están escritos permanentemente en el sistema de archivos), podría intentar usar este script basado en py2exe . Lo que hace es crear archivos temporales cada vez que se ejecuta el progtwig, eliminándolos cuando se completa la ejecución.

EDIT2: Al parecer, lo que está pidiendo también es posible en PyInstaller . De la documentación :

De forma predeterminada, pyinstaller.py crea un directorio de distribución que contiene el ejecutable principal y las bibliotecas dinámicas. La opción –onefile especifica que desea que PyInstaller cree un solo archivo con todo lo que contiene.