Crear un ejecutable .exe en python con cx_Freeze Segunda parte
proporcionada en la entrada Crear un ejecutable .exe en python con cx_Freeze creada por Diego Caraballo para solucionar algunas dudas que en su momento me surgieron y
seguramente a otros también.
no ser así te recomiendo pasarte por la entrada Crear un ejecutable .exe en python con cx_Freeze para su instalación.
interfaz gráfica y recursos externos (imágenes, sonidos, etc).
de Python ¿A qué me refiero con esto? bueno cuando lo instalamos en Windows este
se aloja por defecto en c:python27 entonces para ejecutar el intérprete normalmente entraríamos
al símbolo del sistema (CMD) y tenemos que escribir toda la ruta donde se
encuentra (c:python27python.exe) que puede ser muy engorroso. Pues con este “Path”
vamos a poder ejecutar el intérprete desde cualquier ubicación en el símbolo del
sistema simplemente con escribir “python” tal como lo muestro en el siguiente vídeo:
lo he probado en Windows 7, 8 y 8.1 con éxito, tengo entendido que también funciona
en Windows XP y Vista para los que sigan usando estos sistemas operativos.
a convertir a .exe los tengas en una carpeta de fácil acceso desde el símbolo del
sistema (CMD), por ejemplo C:proyectosprueba porque si tienes todo en el
escritorio de windows, para llegar a la carpeta desde CMD tendrías que escribir una ruta muy larga.
1:
Vamos a nuestro editor de
texto preferido (el mío Sublime Text 2) y escribimos el siguiente código:
x = raw_input("introduzca su nombre: ") print print "hola", x print raw_input("Presiona ENTER para terminar.......")
Nada complicado, guardamos (ejemplo: C:proyectospruebaprueba.py)
Ahora necesitamos crear el archivo setup.py y le escribimos lo siguiente:
import cx_Freeze executables = [cx_Freeze.Executable("prueba.py", base = None, icon = None)] build_exe_options = {"packages": [], "include_files":[]} cx_Freeze.setup( name = "Prueba", version = "1.0", description = "Prueba", options = {"build_exe": build_exe_options}, executables = executables )
dejamos en None ya que este programa se ejecuta en la consola y no tiene una
interfaz gráfica y en icon el icono que tendrá el ejecutable.
en nuestro programa (daré más detalles sobre esto en los ejemplos siguientes) y
en include_files los recursos como imágenes, sonidos, etc. Ya que este ejemplo
no utiliza nada de esto, los dejamos vacíos.
nuestro programa como el nombre, versión, una descripción y las características
que llenamos al principio.
ambos en el mismo directorio |
donde tienes el archivo prueba.py con el nombre setup.py
Enseguida
abrimos el CMD, nos posicionamos en la carpeta y escribimos python setup.py build
Comando para crear el ejecutable |
ENTER y cuando termine se nos habrá creado una carpeta llamada “build” donde
vamos a encontrar nuestro ejecutable:
Carpeta build |
Ejecutable creado |
Si todo salio bien y ejecutamos el archivo prueba.exe nos aparecerá lo siguiente:
programa funcionando |
Ejemplo 2: Generar un PDF apartir de un sencillo formulario en PyQt
Haremos prácticamente lo mismo que en el ejemplo
anterior solo que aquí vamos a hacer algunas modificaciones al archivo setup.py
de la siguiente manera:
import cx_Freeze executables = [cx_Freeze.Executable("formularioPDF.py", base = "Win32GUI", icon = None)] build_exe_options = {"packages": [], "include_files":["formularioPDF.ui"]} cx_Freeze.setup( name = "PDF", version = "1.0", description = "Formulario a PDF", options={"build_exe": build_exe_options}, executables = executables )
va el nombre del archivo .py a
convertir, y ahora en base ponemos “Win32GUI”
ya que nuestro programa maneja una interfaz gráfica, si lo dejáramos en None también funciona pero al ejecutar el archivo
.exe nos abriría también la consola la cual no ocupamos (prueba creando el ejecutable con ambas configuraciones para te des cuenta a lo que me refiero).
build_exe_options aquí pasa algo
curioso:
En package en teoría debemos de
incluir todas las librerías que maneja nuestro programa, si te fijas en el código
fuente de la aplicación importamos; sys,
os, reportlab.pdfgen y PyQt4 las cuales deberíamos de introducir en packages, lo hice la primera vez pero
al querer crear el ejecutable, me decía que no podía encontrar un módulo de la librería
PyQt4, con las primeras 3 no me daba
problemas, así que opte por dejarlo vacío y para mi sorpresa funciono O.O, investigue un poco sobre el tema y resulta
que cx_Freeze añade automáticamente algunas
librerías, desafortunadamente no encontré algún tipo de lista de que librerías detecta
y cuáles no, por lo que aquí es cuestión de estar probando.
QtDesigner, así que aquí lo agregamos.
Todo en la misma carpeta |
quedar todo en la misma carpeta.
Ejecutable funcionando |
hacemos los mismos pasos que en el ejemplo 1:
CMD
posicionamos en la carpeta donde tenemos los archivos (cd c:proyectosPyQt)
python setup.py build
nos genera una carpeta llamada “build”
el archivo formularioPDF.exe
Y debe de funcionar sin que
se abra la consola, la pura interfaz gráfica.
al código del juego.
acordaras que en la sección “funciones de ayuda” tenemos lo siguiente:
# ============================================================================ # ======================== FUNCIONES DE AYUDA ================================ # ============================================================================ def texto(texto, tam=20, color=(0, 0, 0)): fuente = pygame.font.Font(None, tam) return fuente.render(texto, True, color) # ============================================================================
En la línea pygame.font.Font(None,
tam) con el parámetro None le
decimos que pygame se encargue de cargar una fuente por defecto, pues resulta
que a cx_Freeze no le gusta esto y
al intentar crear el ejecutable nos marca un error por lo que tenemos que conseguir
una fuente y especificársela de la siguiente manera:
# ============================================================================ # ======================== FUNCIONES DE AYUDA ================================ # ============================================================================ def texto(texto, tam=20, color=(0, 0, 0)): fuente = pygame.font.Font("arial.ttf", tam) return fuente.render(texto, True, color) # ============================================================================
en la misma carpeta.
y aprovechamos para ponerle un icono a la ventana del juego de esta manera:
Agregando un icono al juego |
la variable icono cargamos la imagen
a mostrar como icono y con pygame.display.set_icon(icono)
lo coloca en la ventana.
Icono colocado |
Ahora sí, creamos el archivo setup.py y lo configuramos de la
siguiente manera:
import cx_Freeze executables = [cx_Freeze.Executable("PONGfinal.py", base = "Win32GUI", icon = "icon.ico")] build_exe_options = {"packages": ["pygame"], "include_files":["arial.ttf", "pierdes.wav", "rebote.wav", "icon.png"]} cx_Freeze.setup( name = "PONG", version = "1.0", description = "Juego PONG", options={"build_exe": build_exe_options}, executables = executables )
en el parámetro icon le asigno
el icono que debe ser una imagen .ico que llevara el archivo .exe.
en packages aquí si agregue la librería pygame porque cx_Freeze no me la detecta por si solo y en include_files todos los recursos que utiliza el juego.