como convertir .py a .deb

Consulte acerca de programas, técnicas, algoritmos etc.

como convertir .py a .deb

Notapor GsusKrist » Dom Dic 07, 2008 12:11 am

Hola a todos ya tenia rato sin aparecer en el foro.
como el titulo de mi pregunta lo dice bienclaro, la idea es como podré convertir el codigo fuente de un juego en pyton a un instalador .deb para ahorrarle el tiempo en instalar python, pygame y cualkier otra biblioteca a los usuarios ke kieran jugar mi juego en ubuntu o en cualkier gnu/linux hijo del debian???
:shock:
les agradezco su respuesta :)
Avatar de Usuario
GsusKrist
 
Mensajes: 20
Registrado: Mar Ago 26, 2008 7:04 pm
Ubicación: BarranquiJAZZ, Rockombia (en realidad es barranquilla colombia jeje)

Notapor hugoruscitti » Mar Dic 09, 2008 1:13 pm

Saludos, disculpa por mi demora al contestar pero quería contestar
tu mensaje con un ejemplo (y eso me llevó algo de tiempo).

Lo primero que debes tener en cuenta es crear la estructura de directorios de
tu aplicación; generalmente esto incluye pensar dónde quedarán tus archivos
dentro del equipo que los instale. Por ejemplo, para el ejemplo que escribí
me resulta conveniente que el programa se instale en "/usr/local/bin", de
forma que el usuario ejecute el nuevo comando "hola" y este inicie la
aplicación.

Luego tienes que crear un directorio que simbolice el directorio "raiz"
del sistema donde se instalará (observa mas abajo para un ejemplo) y un
directorio llamado "DEBIAN" donde se especifica información sobre el
paquete.

Veamos el ejemplo:

http://www.losersjuegos.com.ar/incoming ... deb.tar.gz

El directorio que muestro a continuación forma parte del programa que
construí para ejemplificar la creación del archivo .deb:

Imagen

El directorio de la aplicación tiene dos directorios, uno llamado "DEBIAN"
donde se almacena

Por lo tanto, tu tienes que construir el esquema de directorios para
tu aplicación; hay varias reglas para seguir, aunque seguramente puedas
aprender mucho de inspeccionar otros archivos DEB.

Ah, por cierto, utilizando el navegador de archivos "mc", puedes
ingresar en el interior de un archivo .deb y ver cómo es por dentro. Eso
te puede ayudar a aprender de otros paquetes.


Por último, una vez que tienes tu directorio listo, para crear el
paquete .deb debes ejecutar el comando:

Código: Seleccionar todo
dpkg --build DIRECTORIO_DEL_PROGRAMA


donde DIRECTORIO_DEL_PROGRAMA sería el directorio que representa el sistema
raiz y donde está almacenado el directorio DEBIAN. En el caso del ejemplo este
directorio sería "hola".

Para probar si el programa realmente se instala puedes ejecutar el comando:

Código: Seleccionar todo
sudo dpkg -i ARCHIVO.deb


y para verificar qué se instaló ya puedes utilizar "apt" y su base de
datos. Por ejemplo, para ver la descripción del programa y luego desinstalarlo
ejecuta los siguientes dos comandos:

Código: Seleccionar todo
apt-cache show hola
sudo apt-get remove hola


Bueno, espero haber sido de utilidad. Cualquier duda o comentario avísanos.
Buena suerte.
Avatar de Usuario
hugoruscitti
Site Admin
 
Mensajes: 1242
Registrado: Dom Jul 30, 2006 3:57 am
Ubicación: Buenos Aires, Argentina

¿?

Notapor algarafa » Mar Dic 09, 2008 7:46 pm

Hola Hugo. Pues bien, este tema me ha interesado a mi también y la verdad es que no lo he entendido muy bien. Descomprimo el archivo, y me sale lo siguiente: un directorio llamado hola, que contiene el programa, y un archivo llamado Makefile. Mi primera pregunta es: ¿Para que sirve dicho archivo? Una vez abierto el directorio hola aparecen el directorio DEBIAN y el directorio usr.
El directorio usr se subdivide de la siguiente manera: /usr/local/bin/hola.py que simboliza la ruta donde se instalara el programa, el directorio DEBIAN no entiendo muy bien para que se acaba de utilizar. Gracias por su atención.

P.D.: ¿Como haces para que al hacer doble clic y darle a ejecutar se abra el programa? Aunque añado la linea #!/usr/local/python pero no ocurre.
Gracias de nuevo.
http://liberatumundo.wordpress.com/
Avatar de Usuario
algarafa
 
Mensajes: 135
Registrado: Lun Oct 27, 2008 6:12 pm
Ubicación: España

Re: ¿?

Notapor hugoruscitti » Jue Dic 11, 2008 1:25 pm

RAGPacho escribió:Hola Hugo. Pues bien, este tema me ha interesado a mi también y la verdad es que no lo he entendido muy bien. Descomprimo el archivo, y me sale lo siguiente: un directorio llamado hola, que contiene el programa, y un archivo llamado Makefile. Mi primera pregunta es: ¿Para que sirve dicho archivo?


Saludos, en realidad el archivo Makefile es opcional, se puede
borrar.

El unico motivo por el que está es para facilitar la generación
del paquete, evitando tipear el comando "dpkg --build ...." cada
vez que quieres crear el archivo .deb. Por ejemplo, si estás
dentro el directorio donde esta el archivo Makefile y ejecutas
el comando "make", entonces se ejecuta automáticamente
el archivo .deb... esto se utiliza generalmente para compilar
programas, aunque si quieres se puede borrar el archivo
y escribir manualmente el comando "dpkg --build ..." y listo.

RAGPacho escribió:Una vez abierto el directorio hola aparecen el directorio DEBIAN y el directorio usr.
El directorio usr se subdivide de la siguiente manera: /usr/local/bin/hola.py que simboliza la ruta donde se instalara el programa, el directorio DEBIAN no entiendo muy bien para que se acaba de utilizar. Gracias por su atención.


El directorio DEBIAN solo sirve para especificar detalles del
paquete, no se instalará en el sistema. Uno de los archivos
que puedes colocar ahí es "control", que comenté con
anterioridad. Otro archivo que puedes ver en otros paquetes es
"postint", un script que se ejecutará en el equipo destino junto
después de terminada la instalación.

RAGPacho escribió:P.D.: ¿Como haces para que al hacer doble clic y darle a ejecutar se abra el programa? Aunque añado la linea #!/usr/local/python pero no ocurre.
Gracias de nuevo.


Tendrías que dar atributo de ejecución al programa, por ejemplo
desde la interfaz gráfica usando la ventana de propiedades
de archivo, o ejecutando "chmod a+x nombre_archivo".

Saludos.
Avatar de Usuario
hugoruscitti
Site Admin
 
Mensajes: 1242
Registrado: Dom Jul 30, 2006 3:57 am
Ubicación: Buenos Aires, Argentina

Gracias

Notapor algarafa » Jue Dic 11, 2008 6:56 pm

¡Muchas gracias por las aclaraciones! :D
http://liberatumundo.wordpress.com/
Avatar de Usuario
algarafa
 
Mensajes: 135
Registrado: Lun Oct 27, 2008 6:12 pm
Ubicación: España

Mi primer paquete

Notapor algarafa » Jue Dic 11, 2008 7:37 pm

Bueno, pues ya he hecho mi primer paquete, del programa aquel que había desarrolado en otro topic. Lo podeis descargar desde:
http://informaticafacil.atwebpages.com/ ... etrica.deb
Mi pregunta ahora es la siguiente: ¿Como hacer para que con poner calculadora-geometrica en la terminal se abra?
http://liberatumundo.wordpress.com/
Avatar de Usuario
algarafa
 
Mensajes: 135
Registrado: Lun Oct 27, 2008 6:12 pm
Ubicación: España

Re: Mi primer paquete

Notapor hugoruscitti » Vie Dic 12, 2008 12:32 pm

RAGPacho escribió:Mi pregunta ahora es la siguiente: ¿Como hacer para que con poner calculadora-geometrica en la terminal se abra?


Cuando escribes un nombre de comando en una terminal, el interprete
de ordenes busca entre los programas que tiene dentro de los directorio "/usr/bin" y
"/usr/local/bin" (entre otros) a ver si coincide con algún nombre.

Por ejemplo, si escribo un archivo llamado "calculadora", le doy permisos
de ejecución con "chmod a+x archivo" y lo grabo en "/usr/local/bin", ese
programa se podrá ejecutar desde cualquier sitio escribiendo "calculadora".

Así que para generar un paquete .deb que genere un comando o programa
nuevo, solo tienes que crear un directorio "usr/local/bin" o "usr/bin"
en tu directorio principal y colocar un archivo ejecutable ahí.

Ah, y recuerda que luego de instalar el paquete puedes ejecutar
"dpkg -L nombre_del_paquete" para ver dónde se instalaron todos los archivos.

Saludos.
Avatar de Usuario
hugoruscitti
Site Admin
 
Mensajes: 1242
Registrado: Dom Jul 30, 2006 3:57 am
Ubicación: Buenos Aires, Argentina

Notapor endaramiz » Vie Dic 12, 2008 4:19 pm

Una gran explicación (con ejemplos y todo... ). Ya se algo más para cuando programe algo en condiciones :D

Muchas gracias!
Avatar de Usuario
endaramiz
 
Mensajes: 283
Registrado: Vie Ago 31, 2007 9:25 am
Ubicación: Barcelona

Gracias por la aclaración.

Notapor algarafa » Lun Dic 15, 2008 5:23 pm

:P Gracias por la aclaración, sin duda me será útil.
http://liberatumundo.wordpress.com/
Avatar de Usuario
algarafa
 
Mensajes: 135
Registrado: Lun Oct 27, 2008 6:12 pm
Ubicación: España

Notapor lacabra25 » Vie Ene 09, 2009 4:27 pm

hola, ya que esta este tema iniciado voi a aprovechar a hacer una pregunta sobre los .deb, ¿como se hace para que al instalarse ademaas de poderse ejecutar en la terminal aparezca en el menu del sistema?

Y una cosa mas, el comando que hay que usar para crear el .deb ¿es un programa, un comando del sistema o que es?, si es un programa ¿que hace exactamente el programa?

Si el programa necesita de archivos para poder ejecutarse como imagenes, archivos que pueda modificar para guardar datos y configuraciones y cosas asi (como suelen necesitar los juegos) ¿como habria que ponerlos en el .deb para que una vez instalados el programa los pueda encontrar y los que necesite modificar pueda modificarlos?
Esta cuenta ahora a pasado a la cuenta jhg
Avatar de Usuario
lacabra25
 
Mensajes: 222
Registrado: Mié Abr 02, 2008 9:45 pm
Ubicación: Tenerife (España)

Notapor GsusKrist » Sab Ene 24, 2009 6:11 am

hola....
la verdad me descuidé un poco sobre este tema y sobre mi participacion en general en el foro y al parecer yo no soy el unico interesado en compilar y distribuir mis programas en forma de instaladores....:D
la verdad fué de mucha ayuda los comentarios y las inkietudes ke los demás aportaron, y gracias a hugo kien contestó a todas las anteriores, pero me pregunté nuevamente si para compilar o empaketar un programa de scripts en python, ".Py" y pasarlo a .rpm o instalador de red hat tendré ke hacer lo mismo o debo usar algúna serie de indicaciones distintas?? y Googleando logré conseguir esta info que me resultó y por eso :

Una vez terminemos con el desarrollo de nuestra nueva aplicación es conveniente empaquetarla de forma que sea sencillo para los usuarios instalarla, y para nosotros distribuirla.

En Python existen dos módulos principales para este cometido: distutils, que es parte de la librería estándar y era el método más utilizado hasta hace poco, y setuptools, que extiende la funcionalidad de distutils y es cada vez más popular.

En este capítulo veremos el funcionamiento de ambas herramientas, y terminaremos explicando cómo crear ejecutables .exe para Windows a partir de nuestro programa en Python.
distutils

Todo programa distribuido con distutils contiene un script llamado por convención setup.py, que se encarga de instalar la aplicación llamando a la función setup de distutils.core. Esta función tiene montones de argumentos, que controlan, entre otras cosas, cómo instalar la aplicación.

Destinados a describir la aplicación tenemos los siguientes argumentos:

* name: El nombre del paquete.
* version: El número de versión.
* description: Una línea describiendo el paquete.
* long_description: Descripción completa del paquete.
* author: Nombre del autor de la aplicación.
* author_email: Correo electrónico del autor.
* maintainer: Nombre de la persona encargada de mantener el paquete, si difiere del autor.
* maintainer_email: Correo de la persona encargada de mantener el paquete, si difiere del autor.
* url: Web de la aplicación.
* download_url: Url de la que descargar la aplicación.
* license: Licencia de la aplicación

También tenemos argumentos que controlan los archivos y directorios que deben instalarse, como son packages, py_modules, scripts y ext_modules.

El parámetro scripts, que es una lista de cadenas, indica el nombre del módulo o módulos principales, es decir, los que ejecuta el usuario. Si nuestra aplicación consistiera, por ejemplo, en un solo script ejemplo.py, el código de setup.py podría tener un aspecto similar al siguiente:
view plaincopy to clipboardprint?

1. from distutils.core import setup
2.
3. setup(name="Aplicacion de ejemplo",
4. version="0.1",
5. description="Ejemplo del funcionamiento de distutils",
6. author="Cybertux",
7. author_email="RedHack@linux.usr",
8. url="http://www.pytutorial.info",
9. license="GPL",
10. scripts=["ejemplo.py"]
11. )

from distutils.core import setup

setup(name="Aplicacion de ejemplo",
version="0.1",
description="Ejemplo del funcionamiento de distutils",
author="Cybertux",
author_email="RedHack@linux.usr",
url="http://www.pytutorial.info",
license="GPL",
scripts=["ejemplo.py"]
)

Si hemos escrito otros módulos para ser utilizados por el script principal, estos se indican mediante el parámetro py_modules. Por ejemplo, supongamos que la aplicación consiste en un script principal ejemplo.py, y un módulo de apoyo apoyo.py:
view plaincopy to clipboardprint?

1. from distutils.core import setup
2.
3. setup(name="Aplicacion de ejemplo",
4. version="0.1",
5. description="Ejemplo del funcionamiento de distutils",
6. author="Cybertux",
7. author_email="RedHack@linux.usr",
8. url="http://www.pytutorial.info/",
9. license="GPL",
10. scripts=["ejemplo.py"],
11. py_modules=["apoyo"]
12. )

from distutils.core import setup

setup(name="Aplicacion de ejemplo",
version="0.1",
description="Ejemplo del funcionamiento de distutils",
author="Cybertux",
author_email="RedHack@linux.usr",
url="http://www.pytutorial.info/",
license="GPL",
scripts=["ejemplo.py"],
py_modules=["apoyo"]
)

Para instalar paquetes Python (directorios que contienen varios módulos y un archivo __init__.py) usaríamos el parámetro packages. Si además del módulo ejemplo.py quisiéramos instalar los paquetes gui y bbdd, por ejemplo, haríamos algo así:
view plaincopy to clipboardprint?

1. from distutils.core import setup
2.
3. setup(name="Aplicacion de ejemplo",
4. version="0.1",
5. description="Ejemplo del funcionamiento de distutils",
6. author="Cybertux",
7. author_email="RedHack@linux.usr",
8. url="http://www.pytutorial.info/",
9. license="GPL",
10. scripts=["ejemplo.py"],
11. packages=["gui", "bbdd"]
12. )

from distutils.core import setup

setup(name="Aplicacion de ejemplo",
version="0.1",
description="Ejemplo del funcionamiento de distutils",
author="Cybertux",
author_email="RedHack@linux.usr",
url="http://www.pytutorial.info/",
license="GPL",
scripts=["ejemplo.py"],
packages=["gui", "bbdd"]
)

ext_modules, por último, sirve para incluir extensiones que utilice el programa, en C, C++, Fortran, …

Veamos ahora cómo se utilizaría el archivo setup.py una vez creado.

Al ejecutar el comando

python setup.py install

los módulos y paquetes especificados por py_modules y packages se instalan en el directorio Lib de Python. Los programas indicados en scripts, se copian al directorio Scripts de Python.

Una vez hemos comprobado que la aplicación se instala correctamente, procedemos a crear archivos mediante los que distribuir la aplicación a los usuarios. Para crear archivos con el código fuente se utiliza la opción sdist de setup.py, que crea por defecto un archivo tar.gz en Unix y un zip en Windows.

python setup.py sdist

Sin embargo se puede utilizar --formats para especificar el formato o formatos que queramos generar
bztar .tar.bz2
gztar .tar.gz
tar .tar
zip .zip
ztar .tar.Z

Para crear un archivo tar.bz2, un tar.gz y un zip, por ejemplo, se utilizaría la siguiente orden:

python setup.py sdist --formats=bztar,gztar,zip

Para generar un archivo de distribución binaria, se usa la opción bdist:

python setup.py bdist

Los formatos que soporta bdist son los siguientes:
rpm RPM
gztar .tar.gz
bztar .tar.bz2
ztar .tar.Z
tar .tar
wininst Instalador Windows
zip .zip

Para crear un archivo rpm y un instalador de Windows, por ejemplo, escribiríamos:

python setup.py bdist --formats=wininst,rpm

También es posible crear otros tipos de archivos de distribución utilizando scripts que extienden distutils, como es el caso de los paquetes deb mediante el script stdeb (http://stdeb.python-hosting.com/)
setuptools

setuptools extediende distutils añadiendo una serie de funcionalidades muy interesantes: introduce un nuevo formato de archivo para distribución de aplicaciones Python llamado egg, se encarga de buscar todos los paquetes que deben instalarse y añadir las posibles dependencias, permite instalar paquetes de PyPI con un solo comando, etc.

Además, como setuptools se basa en distutils, un script de instalación básico utilizando setuptools es prácticamente igual a su equivalente con distutils. Tan sólo cambiaría la sentencia de importación.
view plaincopy to clipboardprint?

1. from setuptools import setup
2.
3. setup(name="Aplicacion de ejemplo",
4. version="0.1",
5. description="Ejemplo del funcionamiento de distutils",
6. author="Cybertux",
7. author_email="RedHack@linux.usr",
8. url="http://www.pytutorial.info/",
9. license="GPL",
10. scripts=["ejemplo.py"],
11. )

from setuptools import setup

setup(name="Aplicacion de ejemplo",
version="0.1",
description="Ejemplo del funcionamiento de distutils",
author="Cybertux",
author_email="RedHack@linux.usr",
url="http://www.pytutorial.info/",
license="GPL",
scripts=["ejemplo.py"],
)

El único inconveniente que podríamos encontrar al uso de setuptools es que no está incluido por defecto en Python 2.5, aunque es probable que esto cambie en próximas versiones debido a su gran uso. Pero los desarrolladores de setuptools han pensado en todo, e incluso esto no debería suponer ningún problema, ya que con un mínimo esfuerzo por nuestra parte podemos hacer que setuptools se descargue e instale automáticamente en la máquina del usuario si este no se encuentra ya en el sistema. Basta distribuir con nuestro paquete un pequeño módulo extra ez_setup.py que viene incluido por defecto con setuptools (http://peak.telecommunity.com/dist/ez_setup.py) y llamar a la función use_setuptools del módulo al inicio de setup.py:
view plaincopy to clipboardprint?

1. from ez_setup import use_setuptools
2. use_setuptools()
3.
4. from setuptools import setup
5.
6. setup(name="Aplicacion de ejemplo",
7. version="0.1",
8. description="Ejemplo del funcionamiento de distutils",
9. author="Cybertux",
10. author_email="RedHack@linux.usr",
11. url="http://www.pytutorial.info/",
12. license="GPL",
13. scripts=["ejemplo.py"],
14. )

from ez_setup import use_setuptools
use_setuptools()

from setuptools import setup

setup(name="Aplicacion de ejemplo",
version="0.1",
description="Ejemplo del funcionamiento de distutils",
author="Cybertux",
author_email="RedHack@linux.usr",
url="http://www.pytutorial.info/",
license="GPL",
scripts=["ejemplo.py"],
)

Veamos ahora con más detenimiento algunos de los cambios y novedades que introduce setuptools.
Integración con PyPI

Al estilo de CPAN en Perl setuptools permite instalar de forma fácil y sencilla los paquetes pertenecientes a PyPI, el Índice de Paquetes Python (http://pypi.python.org/pypi), así como subir nuestros propios paquetes.

PyPI cuenta en el momento de escribir estas líneas con 4782 paquetes, por lo que poder instalar los paquetes de este repositorio con un simple comando supone una ayuda muy a tener en cuenta.

Instalar un paquete de PyPI es tan sencillo como pasar al comando easy_install el nombre del paquete a instalar

easy_install docutils
Searching for docutils
Reading http://pypi.python.org/simple/docutils/
Reading http://docutils.sourceforge.net/
Best match: docutils 0.5
Downloading http://prdownloads.sourceforge.net/docu ... z?download
Processing docutils-0.5.tar.gz
Running docutils-0.5/setup.py -q bdist_egg --dist-dir /tmp/easy_install-wUAyUZ/docutils-0.5/egg-dist-tmp-kWkkkv
"optparse" module already present; ignoring extras/optparse.py.
"textwrap" module already present; ignoring extras/textwrap.py.
zip_safe flag not set; analyzing archive contents…
docutils.writers.newlatex2e.__init__: module references __file__
docutils.writers.pep_html.__init__: module references __file__
docutils.writers.html4css1.__init__: module references __file__
docutils.writers.s5_html.__init__: module references __file__
docutils.parsers.rst.directives.misc: module references __file__
Adding docutils 0.5 to easy-install.pth file
Installing rst2pseudoxml.py script to /usr/bin
Installing rst2html.py script to /usr/bin
Installing rst2latex.py script to /usr/bin
Installing rst2s5.py script to /usr/bin
Installing rst2newlatex.py script to /usr/bin
Installing rstpep2html.py script to /usr/bin
Installing rst2xml.py script to /usr/bin
Installed /usr/lib/python2.5/site-packages/docutils-0.5-py2.5.egg
Processing dependencies for docutils
Finished processing dependencies for docutils

Poder subir nuestros paquetes a PyPI requiere de un proceso un poco más laborioso. Primero registramos los detalles de nuestra aplicación en PyPI mediante la opción register del script setup.py, el cuál nos preguntará por nuestro nombre de usuario, contraseña y correo electrónico si no tenemos cuenta en PyPI, o nombre de usuario y contraseña si nos registramos anteriormente:

python setup.py register
running register
running egg_info
creating Aplicacion_de_ejemplo.egg-info
writing Aplicacion_de_ejemplo.egg-info/PKG-INFO
writing top-level names to Aplicacion_de_ejemplo.egg-info/top_level.txt
writing dependency_links to Aplicacion_de_ejemplo.egg-info/dependency_links.txt
writing manifest file 'Aplicacion_de_ejemplo.egg-info/SOURCES.txt'
reading manifest file 'Aplicacion_de_ejemplo.egg-info/SOURCES.txt'
writing manifest file 'Aplicacion_de_ejemplo.egg-info/SOURCES.txt'
We need to know who you are, so please choose either:
1. use your existing login,
2. register as a new user,
3. have the server generate a new password for you (and email it to you), or
4. quit
Your selection [default 1]: 1
Username: zootropo
Password:
Server response (200): OK
I can store your PyPI login so future submissions will be faster.
(the login will be stored in /home/zootropo/.pypirc)
Save your login (y/N)?y

Para crear y subir una distribución con el código fuente de nuestra aplicación se utiliza la opción sdist upload:

python setup.py sdist upload

También podríamos crear y subir un egg (un formato de archivo para distribuir aplicaciones Python que veremos en la próxima sección) utilizando la opción bdist_egg upload:

python setup.py bdist_egg upload

O combinar los tres pasos en un solo comando:

python setup.py register sdist bdist_egg upload

Una vez subido el paquete cualquier persona podría instalarlo en su sistema utilizando easy_install, de la misma forma que cualquier otro paquete de PyPI:

easy_install mi-paquete
Eggs

Los eggs (huevo en inglés) son archivos de extensión .egg mediante los que distribuir aplicaciones en Python. Serían algo así como el equivalente a los archivos .jar del mundo Java. Son multiplataforma, permiten manejar dependencias, y permiten instalar distintas versiones del mismo paquete.

La forma más sencilla de instalar aplicaciones distribuidas como archivos egg es mediante el comando easy_install, el cuál comentamos brevemente en el punto anterior al hablar sobre su uso para instalar paquetes de PyPI. Para instalar un archivo egg no tenemos más que pasarle el nombre del archivo al comando easy_install:

easy_install mi-aplicacion.egg

o bien podemos pasarle la URL de la que descargar el egg:

easy_install http://sourceforgenet/mi_programa.egg

Para construir nuestros propios eggs podemos utilizar el comando bdist_egg de setup.py, de forma similar a la manera en que construíamos paquetes RPM o instaladores para Windows con distutils:

python setup.py bdist_egg
Otros cambios destacables

Uno de los cambios más interesantes es la incorporación de un nuevo argumento para la función setup llamado install_requires, que consiste en una cadena o lista de cadenas que indica los paquetes de los que depende la aplicación. Si nuestra aplicación necesitara tener instalado el paquete apoyo para poder ejecutarse, por ejemplo, escribiríamos lo siguiente:
view plaincopy to clipboardprint?

1. install_requires = ["apoyo"]

install_requires = ["apoyo"]

Y de esta forma, easy_install se encargaría de buscar e instalar el paquete si fuera necesario, bien en PyPI, o en cualquier otro repositorio indicado por el parámetro dependency_links.

Además podemos especificar que se necesita una versión concreta del paquete requerido, que sea mayor o menor que una cierta versión, o que no se trate de una versión determinada utilizando operadores relacionales (==, !=, <, <=, >, >=):
view plaincopy to clipboardprint?

1. install_requires = ["apoyo >= 1.0 < 2.0"]

install_requires = ["apoyo >= 1.0 < 2.0"]

También existen argumentos similares para declarar paquetes que deben instalarse para poder ejecutar el script de instalación (setup_requires), para poder ejecutar las posibles pruebas incluídas con el paquete (tests_require) y para conseguir funcionalidades adicionales (extras_require, que consiste en este caso en un diccionario).

setuptools incluye también atajos útiles, como la función find_packages() que nos evita tener que listar todos y cada uno de los paquetes que utiliza nuestro script en el parámetro packages, como era el caso de distutils:
view plaincopy to clipboardprint?

1. from ez_setup import use_setuptools
2. use_setuptools()
3.
4. from setuptools import setup, find_packages
5.
6. setup(name="Aplicacion de ejemplo",
7. version="0.1",
8. description="Ejemplo del funcionamiento de distutils",
9. author="Cybertux",
10. author_email="RedHack@linux.usr",
11. url="http://www.pytutorial.info/",
12. license="GPL",
13. scripts=["ejemplo.py"],
14. packages = find_packages()
15. )

from ez_setup import use_setuptools
use_setuptools()

from setuptools import setup, find_packages

setup(name="Aplicacion de ejemplo",
version="0.1",
description="Ejemplo del funcionamiento de distutils",
author="Cybertux",
author_email="RedHack@linux.usr",
url="http://www.pytutorial.info/",
license="GPL",
scripts=["ejemplo.py"],
packages = find_packages()
)

Crear ejecutables .exe

Tanto en Mac OS como en la mayor parte de las distribuciones Linux el intérprete de Python está instalado por defecto, por lo que los usuarios de estos sistemas no tienen mayor complicación a la hora de instalar y ejecutar aplicaciones escritas en Python.

En el caso de Windows, esto no es así, por lo que sería interesante que los usuarios de este sistema operativo no tuvieran que instalar el intérprete de Python. También sería interesante que nuestro programa consistiera en un archivo .exe en lugar de uno o varios archivos .py, para simplificar las cosas.

Todo esto lo podemos lograr gracias a py2exe, una extensión para distutils que, como su nombre indica, permite crear ejecutables para Windows a partir de código Python, y que permite ejecutar estas aplicaciones sin necesidad de tener instalado el intérprete de Python en el sistema.

Py2exe funciona examinando nuestro código fuente en busca de los módulos y paquetes que utilizamos, compilándolos y construyendo un nuevo archivo que incluye estos archivos y un pequeño intérprete de Python integrado.

Para probar el funcionamiento de py2exe creemos un pequeño programa ejemplo.py
view plaincopy to clipboardprint?

1. print "Soy un .exe"

print "Soy un .exe"

y el archivo setup.py correspondiente. Los cambios que tenemos que realizar a setup.py son sencillos: importar py2exe, y utilizar los argumentos console y windows para indicar el nombre del script o scripts que queramos convertir en ejecutables de consola o ejecutables de interfaz gráfica, respectivamente.
view plaincopy to clipboardprint?

1. from distutils.core import setup
2. import py2exe
3.
4. setup(name="Aplicacion de ejemplo",
5. version="0.1",
6. description="Ejemplo del funcionamiento de distutils",
7. author="Cybertux",
8. author_email="RedHack@linux.usr",
9. url="http://www.pytutorial.info/",
10. license="GPL",
11. scripts=["ejemplo.py"],
12. console=["ejemplo.py"]
13. )

from distutils.core import setup
import py2exe

setup(name="Aplicacion de ejemplo",
version="0.1",
description="Ejemplo del funcionamiento de distutils",
author="Cybertux",
author_email="RedHack@linux.usr",
url="http://www.pytutorial.info/",
license="GPL",
scripts=["ejemplo.py"],
console=["ejemplo.py"]
)

Para crear el ejecutable, utilizamos una nueva opción de línea de comandos para setup.py disponible tras importar el módulo y llamada, cómo no, py2exe:

python setup.py py2exe

Con esto py2exe generará un directorio build, con las librerías compiladas, y un directorio dist, con los archivos que conforman nuestra aplicación.

Entre los archivos que podemos encontrar en dist tendremos uno o varios ejecutables con el mismo nombre que los scripts indicados en console y windows, un archivo python*.dll, que es el intérprete de Python, y un archivo library.zip, que contiene varios archivos pyc que son los módulos que utiliza la aplicación compilados.

Si queremos reducir el número de archivos a distribuir, podemos utilizar la opción --bundle de py2exe para añadir a library.zip las dll y los pyd (--bundle 2) o las dll, los pyd y el intérprete (--bundle 1).

python setup.py py2exe --bundle 1

o bien podemos añadir un nuevo argumento options a la función setup que indique el valor a utilizar (opción bundle_files), de forma que no tengamos que añadir el flag --bundle cada vez que usemos el comando py2exe:
view plaincopy to clipboardprint?

1. from distutils.core import setup
2. import py2exe
3.
4. setup(name="Aplicacion de ejemplo",
5. version="0.1",
6. description="Ejemplo del funcionamiento de distutils",
7. author="Cybertux",
8. author_email="RedHack@linux.usr",
9. url="http://RedHack@linux.usr",
10. license="GPL",
11. scripts=["ejemplo.py"],
12. console=["ejemplo.py"],
13. options={"py2exe": {"bundle_files": 1}}
14. )

from distutils.core import setup
import py2exe

setup(name="Aplicacion de ejemplo",
version="0.1",
description="Ejemplo del funcionamiento de distutils",
author="Cybertux",
author_email="RedHack@linux.usr",
url="http://www.pytutorial.info",
license="GPL",
scripts=["ejemplo.py"],
console=["ejemplo.py"],
options={"py2exe": {"bundle_files": 1}}
)

Por último podemos incluso prescindir de library.zip e incrustarlo en el ejecutable utilizando el argumento zipfile=None
view plaincopy to clipboardprint?

1. from distutils.core import setup
2. import py2exe
3.
4. setup(name="Aplicacion de ejemplo",
5. version="0.1",
6. description="Ejemplo del funcionamiento de distutils",
7. author="Cybertux",
8. author_email="RedHack@linux.usr",
9. url="http://www.pytutorial.info/",
10. license="GPL",
11. scripts=["ejemplo.py"],
12. console=["ejemplo.py"],
13. options={"py2exe": {"bundle_files": 1}},
14. zipfile=None
15. )

from distutils.core import setup
import py2exe

setup(name="Aplicacion de ejemplo",
version="0.1",
description="Ejemplo del funcionamiento de distutils",
author="Cybertux",
author_email="RedHack@linux.usr",
url="http://mundogeek.net/tutorial-python/",
license="GPL",
scripts=["ejemplo.py"],
console=["ejemplo.py"],
options={"py2exe": {"bundle_files": 1}},
zipfile=None
espero ke les sirva a los compañeros interesados en distribuir sus aplicacioes.... :)
Avatar de Usuario
GsusKrist
 
Mensajes: 20
Registrado: Mar Ago 26, 2008 7:04 pm
Ubicación: BarranquiJAZZ, Rockombia (en realidad es barranquilla colombia jeje)

Notapor hugoruscitti » Sab Ene 24, 2009 2:51 pm

Interesante GsusKrist. ¿podrías citar la fuente de ese tutorial o
lo has desarrollado tu mismo?.
Avatar de Usuario
hugoruscitti
Site Admin
 
Mensajes: 1242
Registrado: Dom Jul 30, 2006 3:57 am
Ubicación: Buenos Aires, Argentina


Volver a General

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado

cron