Crear un ejecutable .exe en python con cx_Freeze
En la entrada de hoy aprenderemos a crear un programa ejecutable en python (.exe) paso a paso con cx_Freeze. Imagínate que en algún momento quieres distribuir tu programa o enviárselo a un amigo: para ejecutar el programa, los destinatarios tendrían que tener instalado python, con su misma versión y si ejecutamos módulos de terceros, también tendrían que tenerlos.
Existen varias maneras de crear archivos ejecutables en python. Nosotros utilizaremos cx_Freeze.
Detalle de las pruebas
Las pruebas se realizaron el: 23/12/2014
Sistema Operativo: Windows XP /32
Versión de python: 2.7
Funcionalidad: al ejecutar el programa se envía automáticamente un correo electrónico
En la prueba solo se importa un módulo (smtplib)
No se utilizaron módulos de terceros
También puedes ver la segunda parte de este artículo (con más ejemplos y utilzando más de un archivo) aquí: Ejecutables en Python segunda parte
Instalar cx_Freeze
Para instalar cx_Freeze en Windows, lo primero que haremos será descargar el instalador desde su página:
https://pypi.python.org/pypi?:action=display&name=cx_Freeze&version=4.3.3#downloads
Descargar cx_Freeze |
En mi caso elegí la opción: cx_Freeze-4.3.3.win32-py2.7.exe(md5)
Cuando descargamos el ejecutable, lo instalamos como un programa cualquiera (siguiente, siguiente....)
Crear el ejecutable paso a paso
Lo que hará nuestro script será enviar un correo electrónico a una dirección ya definida. Para eso, tenemos un archivo "correo.py" (en su caso será el archivo que quieran convertir a ejecutable) que contiene el código para el envío de correo:
Enviar correo con python |
Crearemos otro archivo que llamaremos "setup.py" y que tendrá el siguiente código:
#!/usr/bin/python # -*- coding: utf-8 -*- from cx_Freeze import setup, Executable setup( name="Correo", version="0.1", descriptiom="Enviar Correo", executables = [Executable("correo.py")], )
Creando el archivo setup.py |
En name irá el nombre de nuestra aplicación, luego su versión, descripción y por último, en executables irá el nombre de nuestro archivo python, en nuestro caso "correo.py".
Ahora que ya tenemos los dos archivos.py necesarios, crearemos el archivo ejecutable. En caso de tener configurada la variable de entorno (Path - c:python27) para poder ejecutar python desde cualquier directorio, obviar los siguientes pasos y crear su ejecutable en el directorio que deseen.
Para los que no tengan configurada la variable de entorno, copiaremos los dos archivos (correo.py y setup.py) en la carpeta: c:python27 (o la versión que tengan de python):
La carpeta donde está instalado python |
Luego abrimos el terminal de Windows (cmd) y nos dirigimos a esta misma carpeta (c:python27) de la siguiente manera:
Simbolo del sistema Windows |
Lo primero que hicimos fue ir al directorio Raíz con la orden: cd , luego con el comando dir vimos los archivos y carpetas que contiene el directorio Raíz (C:>), y luego nos cambiamos al directorio Python27 (ustedes eligen según su versión) con con la orden: cd Python27
Una ves en el directorio, escribimos la siguiente orden: python.exe setup.py build
Si todo sale bien, lo que hará esta orden será crear una carpeta build en el directorio c:python27 que contendrá nuestro archivo ejecutable:
Creando nuestro ejecutable |
La carpeta build contiene nuestro ejecutable |
Dentro de build se crea una carpeta con el nombre: exe.win32-2.7, nosotros le cambiaremos el nombre por Correo y la cambiaremos de lugar (En el escritorio):
Moviendo la carpeta al escritorio |
Dentro de la carpeta Correo, encontraremos nuestro archivo ejecutable: correo.exe
correo.exe |
Crear un instalador con winrar
Me imagino que si utilizas Windows ya debes conocer Winrar (es un potente compresor de archivos para windows). Una de las tantas funcionalidades que tiene es crear archivos auto extraíbles.
Winrar para Windows |
¿Para que nos sirve?
Ya vimos que al crear nuestro archivo ejecutable, se crear una carpeta que contiene, aparte de nuestro archivo, otros archivos que hacen que nuestro ejecutable funcione. Si queremos enviar nuestro programa por correo, llevar en un pendrive o distribuir en una web, será más fácil crear un archivo auto-extraíble que contenga la carpeta que hemos creado con anterioridad.
Para eso, lo primero es descargar Winrar: https://www.winrar.es/descargas (su instalación es súper fácil).
Una ves instalado, damos clic con el botón secundario del mouse en la carpeta que contiene nuestro ejecutable y elegimos la opción: añadir al archivo:
Añadir al archivo |
Se abrirá una ventana como la siguiente, donde tildaremos la opción: crear un archivo auto-extraíble (también puede aparecer como crear un archivo SFX):
Marcar opción auto-extraíble |
Existen montones de opciones en winrar para darle funcionalidad a nuestro archivo auto-extraíble, por ejemplo: poner un icono al auto-extraíble, colocar una ruta de extracción, ejecutar un archivo específico al extraer, y mucho más. Nosotros solo nos limitaremos a crear el auto-extraíble en el escritorio, para eso le damos al botón aceptar de la imagen anterior. Una ves hecho esto, se creará un archivo como el de la imagen siguiente. Si lo ejecutamos extraerá la carpeta que contiene nuestro programa ejecutable python en el escritorio:
Archivo auto-extraíble |
Ahora ya podemos distribuir nuestros programas realizados en python sin que el destinatario tenga la necesidad de tener instalado Python y Winarar. Como dije anteriormente, las pruebas que he realizado han funcionado correctamente en Windows XP y Winodows 7, sin embargo, no puedo asegurar que todos los programas funcionen 100 % bien, pero cualquier duda o problema dejarlo en los comentarios de esta entrada.
Cualquier aporte es bienvenido para completar la entrada.
Saludos, Diego...
-
-
Hola Alberto, por ahora no he probado utilizando varios archivos. Pero investigo un poco y luego te comento. Saludos
-
-
Yo tambien tengo ese problema, como crearlo si tengo varios archivos... ya lo resolvieron?... por cierto excelente aportacion muchas gracias 😀
-
Hola Sh0ck10, en estos días averiguo sobre el tema y te comento. Saludos y gracias por visitar el blog...
-
-
😉
-
hola diego ya realice una prueba y con las librerias QT4 pero al obtener el exe al ejecutarlo solo se abre y se cierra rapidamente falta algun parametro o dede la programacion, gracias
-
Hola Celestino, hoy o mañana hago algunas pruebas y te comento. Saludos
-
Celestino, fijate si el siguiente ejemplo puede ayudarte (esta sacado de los ejemplos de cx_Freeze): https://bitbucket.org/anthony_tuininga/cx_freeze/src/1282b6b6ee637738210113dd88c3c198d475340f/cx_Freeze/samples/PyQt4/?at=default
Saludos
-
Saludos Diego, asi es ya verifique la pagina y faltaba la plataforma, que por cierto revisando en la carpeta donde se encuentra el ejecutable y demas archivos dll, hay un zip con nombre library donde hay unos archivos compilados pyc y estan los modulos que hice por ejemplo saludo_main_pyc, hay manera de protegerlos creo que hay algo parecido a import Hook pero no entiendo como agregar estos modulos, esta referente a trabajar con C, te paso el link https://github.com/neurogeek/python-crypt-import-hooks creo que funcionaria como implementarlo, te agradesco por tu aporte gracias
-
Celestino Escudero, si te interesa ya logre hacer un ejecutable del ejercicio
https://www.pythondiario.com/2015/04/generar-un-pdf-partir-de-un-sencillo.html
utilizando cx_Freeze.
-
-
Hola tengo un problema en ejecutar .exe compilados con cx_freeze a partir de un .py y ejecutarlos en distintas versiones de Windows, estos no tienen instalado python......Puede que el error de se por que les hace falta la instalación de python y la librerías que utilizo?
El .exe esta compilado en windows, pero cuando lo ejecuto en otra maquina virtual con la misma versión me dice DLL load failed: No se puede encontrar el modulo especificado y me hace referencia a kinterbasdb ERROR
ImportError: DLL load failed: This application has failed to start because the a
pplication configuration is incorrect. Reinstalling the application may fix this
problem.
-
Hola ... una consulta, cuando hice los pasos que indicaste en el blog, resulto tal cual, pero se abre una ventana negra al ejecutar el .exe creado, como si corriera el mismo archivo py, ahi alguna forma de evitar eso??
-
Hola Josafat, gracias por visitar el blog. Fijate en esta otra entrada: https://www.pythondiario.com/2015/06/crear-un-ejecutable-exe-en-python-con_3.html
Saludos!!!
-
-
hola amigo... excelente tuto, me ha servido mucho...
he logrado convertir de .py a .exe con exito, incluso con la linea base=win32GUI para no mostrar la linea de comandos de windows...
tengo el siguiente problema... todo marcha bien con la conversion que te he indicado, mi programa muestra la medicion de sensores, el software no presenta ningun tipo de error, solo que a los 60 segundos de no utilizarse, las medidas dadas por los display se congelan, solo se actualizan al hacer clic en algun boton o mover algo.... ese problema sucede 60 segundos después de la ultima actividad, sea cliclear un boton o cualquier otra cosa...
PD: esto no ocurre si uso base=None...
quiza con este ejemplo me pueda dar a entender..
supongamos que he elavorado un reloj digital, tiene un boton que cambia los colores del display, entonces la actualizacion del display se parara luego de 60 segundo de su ultimo uso, es decir luego de haber presionado el boton y no utilizarlo mas-
amigo ya solucioné... no era la conversión.. solo tenia un problema en mi código .py ... estaba mandando demasiados print a la consola de python... solo desactive en su totalidad y asunto arreglado..
realicé una prueba del programa alrededor de 30min y funciona corectamente... gracias por tus tutos... éxitos
-
Genial, te iba a pedir que revisaras tu código porque no me daba cuenta del problema!!!!
Gracias por visitar el blog!!!
-
-
Hola Diego.Estoy un poco desesperado, porque ya lo he intentado casi todo y no logro solucionar este problema, a ver si tu me puedes ayudar. Verás, estoy intentando crear un ejecutable para windows de un programa que tengo en python3,4. Hago todo lo que dices, pero al intentar python.exe setup.py build me sale el error: python.exe: can't open file setup.py. Errorn2 No such file or directory.
-
Hola Jose, me me alegro hallas resuelto tu inconveniente!!! Gracias por pasarte
Saludos
-
-
Hola otra vez. Ya está solucionado. Gracias de todas formas. Un saludo.
-
Hola otra vez. Ya está solucionado. Gracias de todas formas. Un saludo.
-
Hola, gracias por el tutorial. Realicé los mismos pasos, estoy usando python 3.4, descargué ña versión de cx_Freeze para python 3.4, pero me da el siguiente error ¨ImportError: DLL load failed: %1 no es una aplicación Win32 válida¨ Me puedes ayudar con este problema. Gracias de ante mano.
-
Saludos, Diego
te agradezco un montón sin embargo el ejecutable corre y termina eficientemente pero no nos deja ver lo que se hizo busque ayuda en microsoft me dijeron que era problemas de compatibilidad. tengo windows 10 pro. Que tengo que hacer ahora amigo.
Gracias por tu ayuda
-
visto
-
Deja una respuesta
Y si mi aplicación tiene varios archivos como la compilo a exe