Lihuen
RSSRSS AtomAtom

Diferencia entre revisiones de «Cómo distribuir programas Python en un solo binario para Windows y Linux»

(Generar un EXE para Windows con py2exe)
Línea 115: Línea 115:
  
 
La carpeta resultante será "dist/duinobot", en ella se podrá encontrar "mover.exe" y todas las bibliotecas y modulos requeridos por el proyecto.
 
La carpeta resultante será "dist/duinobot", en ella se podrá encontrar "mover.exe" y todas las bibliotecas y modulos requeridos por el proyecto.
 +
 +
=== Ejemplo de uso de PyInstaller empaquetando Pilas-Robots ===
 +
 +
Pilas-Robots es un fork de Pilas Engine que incorpora un simulador de los robots del proyecto [http://robots.linti.unlp.edu.ar/|Programando con Robots de la Facultad de Informática] (aclaración: es posible [http://pilas-engine.com.ar/#/descargas|descargar la versión original de Pilas Engine para Windows] en su sitio oficial, esta guía es para el simulador de robots).

Revisión de 16:11 5 jun 2015

Hoy en día existen distintas formas de distribuir programas y módulos Python:

  • Subiéndolos al repositorio "PyPI - the Python Package Index".
  • Paquetes deb, rpm, etc...
  • Wheels [1] [2].
  • En un binario para Windows o para Linux junto con todas sus dependencias.
  • En una carpeta con todas sus dependencias para Windows o para Linux.

En este artículo se exploran las 2 últimas posibilidades que permiten distribuir módulos Python "autosuficientes" que ni siquiera requieren un intérprete de Python instalado en la máquina para funcionar.

Para generar estas distribuciones existen distintas herramientas py2exe (específica para Windows) y PyInstaller (para Linux, Windows, Mac OS X y otros...).

Dependencias para Windows

Instalar [3] para Windows. En muchas distribuciones GNU/Linux Python viene preinstalado o es instalable usando el gestor de paquetes correspondiente.

Generar un EXE para Windows con py2exe

El primer paso es instalar [4] (la versión debe coincidir con la versión de Python instalada).

Luego, usando pip es necesario instalar las dependencias del paquete que se desea convertir:

 python -m pip install <nombre_paquete>

Finalmente, dentro del directorio donde está el módulo Python que se desea convertir, es necesario modificar el archivo setup.py agregando "import py2exe" y agregando a la invocación a "setup" el argumento "console". Este argumento console debe recibir como valor una lista con los módulos Python que deben ser ejecutables, generalmente en esta lista deberá estar al menos el programa principal.

Ejemplo de uso de py2exe empaquetando DuinoBot

Primero es necesario descargar el código fuente de [5] y ver sus dependencias. Las mismas se encuentran en el archivo setup.py:

#!/usr/bin/env python
# -*- encoding: utf-8 -*-
from distutils.core import setup
import os.path
import glob
 
setup(name='duinobot',
      version='0.13-8',
      description='API en Python para el robot Multiplo N6',
      author='Joaquin Bogado, Fernando Lopez, Sofia Martin',
      author_email='soportelihuen@linti.unlp.edu.ar',
      url='http://lihuen.linti.unlp.edu.ar',
      packages=['duinobot', 'duinobot.pyfirmata'],
      package_dir={'duinobot': '.'},
      data_files=[('usr/share/doc/duinobot/ejemplos',
                   glob.glob(os.path.join('ejemplos', '*.py')))],
      requires=['pyserial', 'pygame'],
      classifiers=[
          "Environment :: Console",
          "Intended Audience :: Developers",
          "Intended Audience :: Education",
          "Operating System :: OS Independent",
          "Programming Language :: Python",
          "Topic :: Education",
          "Programming Language :: Python :: 2.6",
          "Programming Language :: Python :: 2.7"
      ])

El campo "requires" indica que el paquete necesita los módulos "pyserial" y "pygame". Según corresponda será necesario instalar estos módulos descargando un instalador para Windows desde el sitio oficial o usando "pip". Para estos casos se optó por descargar el instalador de "pygame" (que no se puede instalar con pip) e instalar "pyserial" con pip:

python -m pip install pyserial

Luego de instaladas las dependencias se puede probar el paquete para ver si funciona:

python27
>>> import duinobot
>>> ...

Luego es necesario determinar cual será el programa a ejecutar al hacer doble click en el archivo .exe, en este caso crearemos un script que mueve el robot 1, este archivo tendrá el nombre "mover.py":

from duinobot import *
b = Board()
r = Robot(b, 1)
r.forward(100, 1)
r.turnLeft(100, 1)

El siguiente paso es modificar el archivo "setup.py" para poder utilizar py2exe, esta modificación consta en agregar "import py2exe" y agregar el argumento "console" que indique que hay que generar un ".exe" para "mover.py":

#!/usr/bin/env python
# -*- encoding: utf-8 -*-
from distutils.core import setup
import os.path
import glob
import py2exe
 
setup(name='duinobot',
      console=['mover.py'],
      version='0.13-8',
      description='API en Python para el robot Multiplo N6',
      author='Joaquin Bogado, Fernando Lopez, Sofia Martin',
      author_email='soportelihuen@linti.unlp.edu.ar',
      url='http://lihuen.linti.unlp.edu.ar',
      packages=['duinobot', 'duinobot.pyfirmata'],
      package_dir={'duinobot': '.'},
      data_files=[('usr/share/doc/duinobot/ejemplos',
                   glob.glob(os.path.join('ejemplos', '*.py')))],
      requires=['pyserial', 'pygame'],
      classifiers=[
          "Environment :: Console",
          "Intended Audience :: Developers",
          "Intended Audience :: Education",
          "Operating System :: OS Independent",
          "Programming Language :: Python",
          "Topic :: Education",
          "Programming Language :: Python :: 2.6",
          "Programming Language :: Python :: 2.7"
      ])

El último paso consiste en generar la carpeta con el proyecto ejecutando:

python setup.py py2exe

La carpeta resultante será "dist/duinobot", en ella se podrá encontrar "mover.exe" y todas las bibliotecas y modulos requeridos por el proyecto.

Ejemplo de uso de PyInstaller empaquetando Pilas-Robots

Pilas-Robots es un fork de Pilas Engine que incorpora un simulador de los robots del proyecto con Robots de la Facultad de Informática (aclaración: es posible la versión original de Pilas Engine para Windows en su sitio oficial, esta guía es para el simulador de robots).