Manual de Py2Exe
NOTA. Esto es lo que pude recuperar del manual de Py2Exe que elaboré para el antiguo sitio de Python México, algunas partes seguramente están incompletas, y los enlaces a los pantallazos (screenshots) están rotos.
En este manual se explicará de manera breve cómo convertir programas de Python en archivos ejecutables para Windows, utilizando py2exe. El codigo fuente de los ejemplos esta disponible para ser descargado.
Uso de py2exe
En general, es muy sencillo utilizar py2exe. Simplemente se deben realizar los siguientes pasos para generar un ejecutable:
1. Instalar Py2exe, que puede ser obtenido de http://www.py2exe.org/.
2. Escribir un archivo de configuración llamado setup.py, en el que se importa el modulo py2exe y se especifica información general del programa que se quiere convertir a ejecutable. El archivo setup.py debe encontrarse en el mismo directorio que el programa a convertir.
3. Ejecutar el siguiente comando para crear el archivo ejecutable.
python setup.py py2exe
Ejemplo 1: Hola mundo
Este ejemplo consiste de un script que manda el mensaje "Hola mundo" a la consola :
1 # hola/hola.py
2 print 'Hola'
3
El archivo de configuración es el siguiente:
1 # hola/setup.py
2 from distutils.core import setup
3 import py2exe
4
5 setup(console=["hola.py"])
6
El archivo setup.py mostrado anteriormente indica que se trata de una aplicación que corre en la consola. Ahora se procede a ejecutar el archivo de configuración con el argumento py2exe:
python setup.py py2exe
Una vez que se corra el script para generar el ejecutable, se obtendrá en la consola una salida profusa que no incluiré aquí. También podremos observar que se han creado dos nuevas carpetas: build y dist. La que nos interesa es dist, pues ella contiene el archivo ejecutable y sus dependencias (DLLs y otros archivos), como puede verse en la siguiente imagen (enlaces a imagenes rotos):
El archivo hola.exe es el archivo ejecutable correspondiente a hola.py.
Ejemplo 2: Programas que llaman a otros programas
En ocasiones se tienen programas Python que hacen uso de clases o funciones que se encuentran en otro archivo. Este es el caso del archivo llamador.py:
1 # llamadas/llamador.py
2 import llamado
3
4 print "Lo voy a llamar"
5 llamado.afun()
6
El archivo llamador.py invoca a la función afun que se encuentra dentro de llamado.py:
1 # llamadas/llamado.py
2
3 def afun():
4 print "me llamaron"
5
El contenido del archivo setup.py es el siguiente:
1 # llamadas/setup.py
2 from distutils.core import setup
3 import py2exe
4
5 setup(console=["llamador.py"])
6
Una vez que se haya ejecutado py2exe, se podrá encontrar dentro de la carpeta dist el archivo ejecutable llamador.exe, que contiene la funcionalidad de ambos programas.
Ejemplo 3: Incluyendo dependencias
py2exe permite no solo crear un archivo ejecutable, sino también recolectar los archivos requeridos para el funcionamiento del programa. Es el caso del siguiente script, cuya función consiste en:
Leer dos archivos de texto(config.txt y mensajes.txt) Imprimir contenido de los archivos leídos Imprimir el contenido del directorio img
1 # dependencias/bigApp.py
2
3 import os
4
5 #leer e imprimir las lineas de config.txt
6 f = open('config/config.txt', 'r')
7 for linea in f.readlines():
8 print linea
9
10 #leer e imprimir las lineas de mensajes.txt
11 f = open('config/mensajes.txt', 'r')
12 for linea in f.readlines():
13 print linea
14
15 #imprimir el listado de archivos del directorio img
16 archivos = os.listdir('img')
17 print archivos
18
De la descripción anterior se desprende que nuestro programa tiene como dependencias las carpetas config e img, junto con su contenido, por lo que estas también deben ser distribuidas con él.
El script setup.py es el siguiente:
1 # dependencias/setup.py
2 from distutils.core import setup
3 import py2exe
4 import glob
5
6 setup(console=["bigApp.py"],
7 data_files=[("config",
8 ["config/config.txt", "config/mensajes.txt"]),
9 ("img",
10 glob.glob("img\\*.gif"))],
11 )
12
La opción data_files contiene la lista de recursos que habrán de ser incluidos en la distribución.
Después de ejecutar py2exe podrán encontrarse dentro de la carpeta dist los recursos referidos en el archivo de configuración, como se ve en la siguiente figura:
Ejemplo 4: Librerías externas
py2Exe es capaz de detectar dependencias de librerías que no forman parte de la distribución estándar de Python. El siguiente programa hace uso de wxPython para mostrar una ventana muy sencilla.
1 # exWx/gui.pyw
2
3 import wx
4 class MainWindow(wx.Frame):
5 """ Subclase de Frame. """
6 def __init__(self,parent,id, title):
7 wx.Frame.__init__(self,parent,wx.ID_ANY,title,size=(200,100),
8 style=wx.DEFAULT_FRAME_STYLE|wx.NO_FULL_REPAINT_ON_RESIZE)
9 self.control = wx.TextCtrl(self,1,style=wx.TE_MULTILINE)
10 self.Show(True)
11
12 app = wx.PySimpleApp()
13
14 frame=MainWindow(None,-1,'Editor simple')
15 app.MainLoop()
16
Nota: El archivo tiene la extensión .pyw para indicar al interprete de python que se debe omitir mostrar la consola al dar doble clic sobre él.
Como se puede ver a continuación, el script de configuración no contiene ningún elemento extraño, excepto por la opción console, que ha desaparecido para dar paso a la opción windows, lo que indica que se trata de una aplicación que corre en un ambiente de ventanas.
1 # exWx/setup.py
2 from distutils.core import setup
3 import py2exe
4
5 setup(windows=["gui.pyw"])
6
Se podrá observar que dentro del subdirectorio dist se ha creado el archivo gui.exe, que al ejecutarse muestra lo siguiente:
Aquí termina el manual, espero que les sea de ayuda y les motive a seguir usando Python.
Todas las actualizaciones de este tutorial serán realizadas en mi blog
Autor: Cesar Cardenas Desales
Fecha de Última Modificación: 21 Abril 2006
Created by cesar Last modified 2006-04-21 13:41
