Crear instaladores ejecutables para windows con scripts en python.

michaelsperalta

MichaelSPeralta

Posted on October 25, 2024

Crear instaladores ejecutables para windows con scripts en python.

Otra entrada técnica.

Contexto rapido, tengo un back y un front (bien bien beta) en python (flask). Los levanto el local en el browser.

El back levanta en el puerto flask run --port=5001
El front levanta en el puerto flask run --port=5000

La app se ejecuta en el browser.

http://localhost:5000/

Basico, hasta acá nada nuevo.

Tengo que instalar esta app en otra maquina. Pensamiento 1 instalar python y todas las librerias y dependecias y... no.

Acá entra Copilot de nuevo al rescate. Le promptee consejos para instalar estos scripts python como ejecutables para windows.

Me recomendo algunas cosas interesantes.

Antes que nada, tener el entorno virtual levantado, las dependencias instaladas, asegurarse de que todo funciona correctamente en local y...

Primero usar pyinstaller para generar archivos .exe de mis apps.

pip install pyinstaller

En cada directorio ejecuto:

/mi-proyecto/backend
/mi-proyecto/frontend

pyinstaller --onefile --name backend app.py

Acá me fue necesario especificar pasar los templates como parametro, porque daba un error de jynga2

pyinstaller --onefile --name frontend --add-data
"templates;templates" app.py

Ejemplo:
Image description

Paso siguente, instalar Inno Setup para generar instaladores.

web - Inno Setup

Bueno tuve que promtear algo tambien para tener una base, porque no tenia idea como escribir el script ni la sintaxis de Inno setup.

[Setup]
AppName=My Awesome APP 
AppVersion=1.0
DefaultDirName={pf}\MyAwesomeAPP 
DefaultGroupName=My Awesome APP
OutputBaseFilename=MyAwesomeAPP
Compression=lzma
SolidCompression=yes

[Files]
; Incluir todos los archivos del proyecto
Source: "C:\Users\url-a-tu-proyecto\*"; DestDir: "{app}"; Flags: recursesubdirs createallsubdirs
; Incluir los ejecutables generados por pyinstaller
Source: "C:\Users\url-a-tu-proyecto\frontend\dist\frontend.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "C:\Users\url-a-tu-proyecto\backend\dist\backend.exe"; DestDir: "{app}"; Flags: ignoreversion

[Icons]
Name: "{group}\My Awesome APP"; Filename: "{app}\frontend.exe"
Name: "{group}\My Awesome APP"; Filename: "{app}\backend.exe"

[Run]
; Ejecutar el backend
Filename: "{app}\backend.exe"; Flags: nowait
; Ejecutar el frontend
Filename: "{app}\frontend.exe"; Flags: nowait
Enter fullscreen mode Exit fullscreen mode

Esta fue mi estructura base.

Compile, espere unos minutos... y me genero el output.

Image description

Y aqui esta el primer instalador :D

A la primera claramente no anduvo... pero 16 pruebas mas tarde, la app quedo corriendo. Los scripts ejecutandose...

Image description

Y desde mi browser pude acceder a mi app.

Image description

Lo interesante de esta cuestion, las herramientas! Obviamente. Lo que me gusta, me resulto rapido y facil el uso de inno setup, aprendí a lidir con algunas cuestiones de configuracion de pyinstaller, como las flags para los templates... bien raro el error :P

Y el uso de nuevas tecnologias y python siempre es agradable...

La proxima quiza alguna app de escritorio con estos scripts, para optimizar un poco el tamaño final, la arquitectura de archivos y claramente que no esten los terminales ejecutandose en vivo y en directo, con mensajes de entornos de desarrollo y teniendo que entrar a un localhost desde el browser! :panic

💖 💪 🙅 🚩
michaelsperalta
MichaelSPeralta

Posted on October 25, 2024

Join Our Newsletter. No Spam, Only the good stuff.

Sign up to receive the latest update from our blog.

Related