Ir al contenido principal

¿Como hacer un ejecutable en Python?

Una excelente opción en base a mis experiencias con diferentes paquetes, es con la librería Pyinstaller. El problema de otras librerías como por ejemplo py2exe es que conllevan mayores complicaciones cuando se tienen módulos externos en el código fuente.

En mi caso, recuerdo haber utilizado py2exe para generar algún ejecutable pero pude hacerlo sólo para programas muy sencillos. Si por ejemplo la aplicación involucraba algún paquete gráfico como Matplotlib ya en ese momento el proceso daba errores.

En el caso de Pyinstaller afortunadamente, éste considera esa muy probable circunstancia. Lo que realiza es un proceso de búsqueda sobre las dependencias que el código fuente posee ( cuando digo código fuente me estoy refiriendo al programa al que deseamos crear el archivo ejecutable). Sólo en casos específicos Pyinstaller necesita algunas especificaciones para indicar la ubicación y/o existencia de módulos externos, pero en mi caso no fue necesario y de hecho trabajó muy bien con diferentes módulos que estaban contenidos en mi programa (creí que no podría hacerlo tan rápidamente)

Se puede descargar Pyinstaller via pip:


pip install pyinstaller

También lo pueden descargar en su página oficial:


Pyinstaller es multiplataforma. Particularmente solo lo he utilizado en Linux (Linux Mint) y Windows 7.

Su utilización es sencilla, simplemente en el caso de Linux se abre la terminal en la ubicación donde está el archivo .py al que queremos hacer el ejecutable. Por ejemplo tenemos el siguiente código:



import time
from PyQt4 import QtCore, QtGui

class Window(QtGui.QWidget):
    def __init__(self):
        QtGui.QWidget.__init__(self)
        layout = QtGui.QVBoxLayout(self)
        self.label = QtGui.QLabel(self)
        layout.addWidget(self.label)
        self.buttonStart = QtGui.QPushButton('Start', self)
        self.buttonStart.clicked.connect(self.handleStart)
        layout.addWidget(self.buttonStart)
        self.buttonStop = QtGui.QPushButton('Stop', self)
        self.buttonStop.clicked.connect(self.handleStop)
        layout.addWidget(self.buttonStop)
        self._running = False

    def handleStart(self):
        self.buttonStart.setDisabled(True)
        self._running = True
        while self._running:
            self.label.setText(str(time.clock()))
            QtGui.qApp.processEvents()
            time.sleep(0.05)
        self.buttonStart.setDisabled(False)

    def handleStop(self):
        self._running = False

if __name__ == '__main__':

    import sys
    app = QtGui.QApplication(sys.argv)
    window = Window()
    window.setGeometry(500, 300, 200, 100)
    window.show()
    sys.exit(app.exec_())






Dicho código se guarda en un archivo .py y ejecutamos la terminal (en el caso de Linux) con la dirección del archivo. Luego escribimos: 

 pyinstaller --onefile nombre_archivo.py 

 Esto generará dos carpetas que contienen toda la información necesaria para ejecutar el programa en cuestión, es de suponer que están todos los módulos dependientes de la aplicación. El commando --onefile es para que Pyinstaller procure empaquetar archivos, eso es lo que provoca que dentro de la carpeta dist esté el ejecutable solo. Finalmente para ejecutar el programa ahora solo es necesario hacer doble clic sobre el archivo contenido en la carpeta dist, este debe tener el mismo nombre que el archivo original en Python. El ejecutable quita el requisito de tener Python para poder correr el programa, pues ya el archivo resultante es un archivo compilado.

Comentarios

  1. Muy buen blog, hice un script en python y quiero pasarlo a exe pero no he podido, he buscado en internet pero no encontrado como hacerlo usando PyInstaller 3.1 y claro desde windows porque siempre encuentro ejemplos pero todos para usar desde linux.

    Agradezco su ayuda, mi correo es andres_garcia1996@hotmail.com

    ResponderEliminar
  2. muy buena información, el unico que en verdad me sirvio para poder crear un ejecutable de python

    ResponderEliminar
  3. Hola Hugo, Saludos desde Merida-Venezuela, excelente el código. estoy enteresado en Empaquetando programas de Python para Windows desde Linux, si tienes alguna idea se agradece.
    Francisco Duran

    ResponderEliminar
    Respuestas
    1. Hola Francisco, no había visto tu mensaje. Hasta ahora no sé como hacer lo que mencionas, pero si se de algo, te lo haría saber. Saludos.

      Eliminar
  4. Hola se que es viejo este post pero tengo un inconveniente tengo un app en python con 2 carpetas una tiene imágenes y la otra archivos html. mi app es básicamente un navegador web solo que no navega sino que abre un grupo de archivos ya el app esta creada en pagina web y mi problema es compilar eso en un .exe no lo e logrado de ninguna manera tengo xubuntu 16.04 y desde la terminal escribo ./cgr.py y funciona bien pero cuando uso pyinstaller me crea un ejecutable al ejecutarlo solo sale la cmd de window y ya.

    ResponderEliminar
    Respuestas
    1. Hola, ¿que mensaje o información te sale en la cmd de windows cuando se intenta abrir el programa?

      Eliminar

Publicar un comentario

Entradas populares de este blog

Mostrar código de programación en tu blog

En la web hay múltiples herramientas para mostrar código en las entradas de tu blog, no obstante, una en particular que considero rápida, sencilla y minimalista es la que ofrece el portal  tohtml.com . Sólo es necesario pegar el código fuente (o el programa como tal) en el campo de texto de source code, seleccionar el lenguaje del programa, el estilo deseado y dar click en highlight. El resultado es el contenido dentro del campo de texto HTML. El código HTML es el que ha de pegarse en la entrada de tu blog. Aquí una muestra: print "Esto es una prueba" a = 1 b = 2 # Suma de dos enteros: c = a + b print "El resultado es: " , c

¿Qué tan segura es tu contraseña?

La página a continuación resulta de  utilidad para determinar qué tan segura es tu contraseña. Cuando la ingresas, revela cuanto tardaría tu PC en descifrar la contraseña.  Obviamente, la clave que ingresas no es utilizada ni difundida en Internet, así que puedes estar tranquilo. El sitio revela datos interesantes, como el hecho que la contraeña 1234567 puede ser crackeada instantáneamente por ser una de las más usadas. Para ingresar a la página, presiona  aquí PD: Por último es importante destacar que se debe tener cuidado de donde se ingresa la contraseña, es decir, desde qué sitio.