Personalizado ejecutable con Pyinstaller

Ya hace un tiempo publique una entrada sobre como crear un ejecutable para windows desde un proyecto de python con ayuda de pyinstaller.

Hasta el momento pyinstaller me a parecido el mejor modulo para compilar proyectos de python y funcionales en windows y lo mejor que solo se genere un solo archivo.

Aunque en el post anteriores no explique como se realizaba para que se generara un solo archivo solo basta con agregar el parámetro --onefile al comando de compilado, es decir quedaría asi.

python -m pyinstaller miproyecto.py --onefile

Entonces varios de los parametros interesantes que se le pueden pasar a pyinstaller son los siguientes:

  • --name nombreproyecto : Este parametro realmente lo que haces es cambiar el nombre al ejecutable que se va a generar, por defecto se le asigna el nombre que tiene el archivo .py
  • --windowed: Este parametro hace que no se abra ningun tipo de consola en la ejecución del software, obviamente si el proyecto contiene ventanas estas si se abren, pero las de consolas no.
  • --version-file archivoversion: Con este parametro se incluye el archivo de version, y dentro de este archivo pueden ir incluidos datos, como la versión del software, la licencia, creador, varios detalles del software.
  • --icon icono.ico: Con este se le indica el icono que se le quiere aginar al software
  • --key clave: Cifra los modulos utilizados en bytes antes de ser agregados en el paquete final. pero para que funcione es necesario tener instalado el modulo PyCrypto.
PD: Al parecer pycrypto no sera tan fácil instalarlo en windows, ya que utiliza varios comandos de linux que hace que se genere errores a la hora de instalarse, si se descargar el paquete desde python.org, afortunadamente existe otro repositorio de pycrypto para windows pero no esta disponible para todas las versión de python, Se puede checar desde ACA.


Actualmente Pyinstaller no soporta el --version-file para python 3 asi que pues lo que recomiendan en paginas de soporte es utilizar algún otro software externo que permita editar los datos del .exe ya compilado.
Sin embargo se realiza la prueba con un ptoyecto en python 2.7

El resultado el es siguiente:


Se trabajo la version con el siguiente archivo.

# UTF-8
#
# For more details about fixed file info 'ffi' see:
# http://msdn.microsoft.com/en-us/library/ms646997.aspx
VSVersionInfo(
  ffi=FixedFileInfo(
    # filevers and prodvers should be always a tuple with four items: (1, 2, 3, 4)
    # Set not needed items to zero 0.
    filevers=(96, 12, 19, 1),
    prodvers=(4, 1, 2, 1),
    # Contains a bitmask that specifies the valid bits 'flags'
    mask=0x3f,
    # Contains a bitmask that specifies the Boolean attributes of the file.
    flags=0x0,
    # The operating system for which this file was designed.
    # 0x4 - NT and there is no need to change it.
    OS=0x4,
    # The general type of file.
    # 0x1 - the file is an application.
    fileType=0x1,
    # The function of the file.
    # 0x0 - the function is not defined for this fileType
    subtype=0x0,
    # Creation date and time stamp.
    date=(0, 0)
    ),
  kids=[
    StringFileInfo(
      [
      StringTable(
        u'040904b0',
        [StringStruct(u'CompanyName', u'FuriosoJack'),
        StringStruct(u'ProductName', u'HelpMi'),
        StringStruct(u'ProductVersion', u'1.0'),
        StringStruct(u'InternalName', u'HelpMi'),
        StringStruct(u'OriginalFilename', u'HelpMi.exe'),
        StringStruct(u'FileVersion', u'1.0'),
        StringStruct(u'FileDescription', u'Software Para Mostrar Informacion de Adaptadores'),
        StringStruct(u'LegalCopyright', u'Copyright 2016 Furioso.'),
        StringStruct(u'LegalTrademarks', u'FurisoJack'),])
      ]),
    VarFileInfo([VarStruct(u'Translation', [1033, 1200])])
  ]
)

Ejecutable con privilegios de administrador

En muchos de los cuando se genera un script en python este necesita acceder a algunos lugares del sistema que necesitan privilegios para ello es necesario indicarle al pyinstaller que el script que estamos compilando los necesita, para hacer esto posible es necesario seguir los siguientes pasos.

Es necesario agregar en el comando de compilado --uac-admin 

0 Comentarios