Como generar archivos .exe e instaladores para una aplicación python
Este documento describe los pasos necesarios para crear un archivo ejecutable
de una aplicación python y como generar un instalador y una versión portable
para dicha instalación.
Este documento asume que la aplicación se basa en GTK pero debería funcionar
con menores cambios en otros toolkits.
porque un instalador
- se requiere instalar muchos componentes a mano por el usuario final para una sola aplicación
- muchos instaladores pequeños
- difíciles de encontrar
- difícil encontrar las versiones exactas que funcionan en conjunto
- requiere instalarlos en un orden definido
- rezar
- algunas veces incluso haciendo todo bien puede no funcionar
- fácil de automatizar y documentar para replicar con cada nueva versión
- liberar al usuario final de los problemas para poder usar la aplicación
componentes requeridos
- python
- todas las librerías utilizadas por la aplicación
- py2exe
- nsis
- tiempo y suerte
instaladores
aquí se listan los links a los instaladores de todos los componentes usados en el ejemplo.
- http://python.org/ftp/python/2.6.6/python-2.6.6.msi
- http://sourceforge.net/projects/py2exe/files/py2exe/0.6.9/py2exe-0.6.9.win32-py2.6.exe/download
- http://ftp.gnome.org/pub/GNOME/binaries/win32/pycairo/1.8/pycairo-1.8.6.win32-py2.6.exe
- http://ftp.gnome.org/pub/GNOME/binaries/win32/pygobject/2.20/pygobject-2.20.0.win32-py2.6.exe
- http://ftp.gnome.org/pub/GNOME/binaries/win32/pygtk/2.16/pygtk-2.16.0+glade.win32-py2.6.exe
- http://sourceforge.net/projects/pywin32/files/pywin32/Build%20214/pywin32-214.win32-py2.6.exe/download
- http://sourceforge.net/projects/gtk-win/files/GTK%2B%20Runtime%20Environment/GTK%2B%202.22/gtk2-runtime-2.22.0-2010-10-01-ash.exe/download
- http://sourceforge.net/projects/gtk-win/files/GTK%2B%20Themes%20Package/2009-09-07/gtk2-themes-2009-09-07-ash.exe/download
- http://prdownloads.sourceforge.net/nsis/nsis-2.46-setup.exe?download
orden de instalación
algunos instaladores son independientes de otros, pero para evitar posibles problemas recomiendo la instalación en el siguiente orden.
- python
- gtk-runtime
- gtk2-themes
- nsis
- pygobject
- pycairo
- pygtk
- pywin32
- py2exe
tareas extra
- setear la variable de entorno PATH para agregar el path a la instalación de python
- probar la instalación con una pequeña aplicación gtk
>>> import gtk >>> w = gtk.Window() >>> l = gtk.Label("asd") >>> w.add(l) >>> w.show_all() >>> gtk.main()
prueba con una aplicación de ejemplo
Cree un repositorio con una aplicación de ejemplo para probar los pasos, la aplicación esta disponible en github acá:
http://github.com/marianoguerra/PyGtkOnWindows
pasos
- descargarla
- descomprimirla
- ejecutar python setup.py py2exe
- copiar los directorios lib y share de la instalación del runtime de gtk (no de la instalación de pygtk) al directorio dist
- copiar todos los archivos del directorio dll al directorio dist
- borrar los locales y temas no usados de los directorios copiados a dist (yo solo dejo el theme MS-Windows)
- crear la siguiente estructura de directorios dentro de dist: etc/gtk-2.0
- dentro de ese directorio crear un archivo llamado gtkrc con una linea como la siguiente dentro:
- gtk-theme-name = "MS-Windows"
- podes cambiar el tema usado manteniendo otro theme dentro de share/themes y cambiando el nombre del theme en gtkrc
- right click en ejemplo.nsi y seleccionar "Compile NSIS Script"
- right click en ejemplo-portable.nsi y seleccionar "Compile NSIS Script"
- deberías tener el instalador y la versión portable disponibles
- para probar que funciona correctamente, correr el instalador y la versión portable en una instalación de windows sin los paquetes que instalaste anteriormente
probar con una aplicación real
ahora para sentirlo mas real, creemos un instalador y una versión portable de
un programa real, en este caso, un proyecto personal llamado emesene 2
(http://www.emesene.org/).
pasos
- descargarlo de http://github.com/emesene/emesene
- descomprimirlo
- copiar setup.py and ez_setup.py al directorio emesene
- cd emesene
- correr python setup.py py2exe
- cd ..
- copiar los directorios lib y share de la instalación del runtime de gtk (no de la instalación de pygtk) al directorio dist
- copiar todos los archivos del directorio dll al directorio dist
- borrar los locales y temas no usados de los directorios copiados a dist (yo solo dejo el theme MS-Windows)
- crear la siguiente estructura de directorios dentro de dist: etc/gtk-2.0
- dentro de ese directorio crear un archivo llamado gtkrc con una linea como la siguiente dentro:
- gtk-theme-name = "MS-Windows"
- podes cambiar el tema usado manteniendo otro theme dentro de share/themes y cambiando el nombre del theme en gtkrc
- right click en emesene.nsi y seleccionar "Compile NSIS Script"
- right click en emesene-portable.nsi y seleccionar "Compile NSIS Script"
- deberías tener el instalador y la versión portable disponibles
- para probar que funciona correctamente, correr el instalador y la versión portable en una instalación de windows sin los paquetes que instalaste anteriormente
notas
- obtengo algunos de los dlls requeridos de portable python (http://www.portablepython.com/) e inkscape (http://inkscape.org/)
11 comments:
No se encuentra el punto de entrada del procedimiento gdk_win32_begin_direct_draw_libgtk_only en la biblioteca de vinculos dinamicos libgdk-win32-2.0-0.dll
Solo falla al usar gtk-theme-name="MS-Windows" como tema...
Los demas si me funcionaron correctamente.
@Javier: copiaste los directorios lib y share de la instalacion de gtk a dist?
saludos
si, como te mencione, solo falla con el tema MS-Windows..mm..raro xD
Hola, soy seguidor de su proyecto y quise dar una mano, pero me sale este error
File "C:\Python26\lib\site-packages\py2exe\mf.py", line 204, in find_head_pack
age
raise ImportError, "No module named " + qname
ImportError: No module named OpenSSL
cuando ejecuto
emesene/emesene> python setup.py py2exe
instale el openssl laversion para windows pero igual , no se si me podrias dar una mano
el primer ejemplo si me salio.
Hola, soy seguidor de su proyecto y quise dar una mano, pero me sale este error
File "C:\Python26\lib\site-packages\py2exe\mf.py", line 204, in find_head_pack
age
raise ImportError, "No module named " + qname
ImportError: No module named OpenSSL
cuando ejecuto
emesene/emesene> python setup.py py2exe
instale el openssl laversion para windows pero igual , no se si me podrias dar una mano
el primer ejemplo si me salio.
parece que instalaste mal (o no instalaste) pyOpenSSL
ay no comprendo bien esto de los comentarios entro con mi cuenta de google y me manda al blogger -.-
Bueno si efectivamente era el pyopenssl
pero luego tenia un problema con el modulo de papyon
lei q deberia estar en la carpeta de emesene pero estaba vacia asi q lo baje de la net y lo pege ai
al compilar me faltaban 2 dll
LIBEAY
SSLEAY
las tuve q pegar en system32
ahora si compilo pero solo me conecta a la red DUMMY en el icono de configuracion en cuando elige msn y agrego no acepta :S
aqui esta el enlace de lo q compile
http://www.megaupload.com/?d=8QY3LSEQ
Genelyk:
te recomiendo que instales git para windows y bajes el repositorio de emesene y despues hagas
git submodule init
git submodule update
eso te va a traer todas las dependencias
saludos
bueno instala git pero ahora me sale este error cuando quiero abrirlo.
No handlers could be found for logger "emesene.e3.common.DBus"
:\Archivos de programa\emesene2\.\Crypto\Hash\SHA.py:6: DeprecationWarning: the sha module is deprecated; use the hashlib module instead
Traceback (most recent call last):
File "emesene.py", line 68, in
File "gui\__init__.pyo", line 20, in
File "gui\base\__init__.pyo", line 21, in
File "gui\base\Theme.pyo", line 22, in
File "gui\base\AdiumThemes.pyo", line 23, in
File "gui\base\AdiumTheme.pyo", line 22, in
ImportError: No module named calendar
proba haciendo checkout de marianoguerra/emesene.git
eso lo arregle hace unos dias.
saludos
(hay una guia mas nueva en los ultimos posts)
Post a Comment