pyinstaller es un paquete para python que permite generar fácilmente a partir de un proyecto en python un ejecutable para windows, esto hace que ya no necesitemos del comando por consola básico para ejecutar un programa en python («python my_program.py»), después de generar el «.exe» podremos ejecutarlo simplemente con un doble click o en caso ser un script también podemos añadirlo al path de windows para poder ejecutar nuestro script facilmente desde cualquiera sea la ruta en la que nos encontremos.
instalación
Podemos usar el gestor de paquetes pip de python o clonar del repositorio del proyecto en GitHub.
[*] usando pip, ejecute desde consola el siguiente comando:
pip install pyinstaller
[*] clonando con git el repositorio del proyecto en GitHub:
git clone https://github.com/pyinstaller/pyinstaller.git
[?] si no contamos con git instalado podemos bajarlo como zip desde https://github.com/pyinstaller/pyinstaller
[?] en caso haber clonado el repositorio o haberlo bajado en zip, para ejecutarlo debemos añadir la ruta del pyinstaller al path o de otro modo dirigirnos a la ruta de la carpeta donde se encuentra el pyinstaller que se descargó y ejecutarlo desde ahí. La instalación con pip agrega al path automáticamente pyinstaller por lo que lo podemos ejecutar desde cualquiera sea la ruta en que nos encontremos.
pyinstaller help
El menú de ayuda de pyinstaller lo podemos desplegar desde terminal ejecutando el comando «pyinstaller» sin ningún parámetro.
usage: pyinstaller [-h] [-v] [-D] [-F] [--specpath DIR] [-n NAME]
[--add-data <SRC;DEST or SRC:DEST>]
[--add-binary <SRC;DEST or SRC:DEST>] [-p DIR]
[--hidden-import MODULENAME]
[--additional-hooks-dir HOOKSPATH]
[--runtime-hook RUNTIME_HOOKS] [--exclude-module EXCLUDES]
[--key KEY] [-d {all,imports,bootloader,noarchive}] [-s]
[--noupx] [--upx-exclude FILE] [-c] [-w]
[-i <FILE.ico or FILE.exe,ID or FILE.icns>]
[--version-file FILE] [-m <FILE or XML>] [-r RESOURCE]
[--uac-admin] [--uac-uiaccess] [--win-private-assemblies]
[--win-no-prefer-redirects]
[--osx-bundle-identifier BUNDLE_IDENTIFIER]
[--runtime-tmpdir PATH] [--bootloader-ignore-signals]
[--distpath DIR] [--workpath WORKPATH] [-y]
[--upx-dir UPX_DIR] [-a] [--clean] [--log-level LEVEL]
scriptname [scriptname ...]
.py a .exe
Existen muchas opciones para pyinstaller las más básicas se explican a continuación.
[?] Para los ejemplos utilizaremos un programa en python llamado «hello_friend.py»
Primero abrimos terminal con la ruta del proyecto.
[*] por terminal: cd [ruta del proyecto][*] con el explorador de Windows :


pyinstaller [sin argumentos]
pyinstaller hello_friend.py
Esto nos genera en la misma carpeta del proyecto los directorios «build» y «dist»
X:/Users/User/my_project
├───build
│ └───hello_friend
├───dist
│ └───hello_friend
└───pycache
Si nos dirigimos dentro de «dist/hello_friend» enontraremos nuestro «hello_friend.exe»
pyinstaller –onefile
pyinstaller --onefile hello_friend.py
Este parametro –onefile a comparación de el anterior (sin argumentos o por defecto) nos permite generar un ejecutable con todas las dependencias comprimidas todo en un solo fichero el cual en este ejemplo sera hello_friend.exe, el cual de la misma forma que en el anterior estará en la carpeta dist y dentro de la carpeta de mismo nombre que nuestro programa, podemos mover el «.exe» a donde queramos y eliminar las carpetas que nos genero después de ejecutar el pyinstaller.
ejecutable con ícono
Debemos tener un fichero .ico en el mismo directorio del proyecto y ejecutar el comando con el parametro -i, le podemos añadir opcionalmente –onefile si se desea o simplemente -i .
pyinstaller -i mi_icono.ico --onefile hello_friend.py
