Bienvenidos un día más al curso de Python. En este capítulo vamos a continuar creando un paquete de instalación de la aplicación que hemos creado con el framework Django de modo que podamos compartirlo en caso que quisiéramos. Así que pongámonos manos a la obra.
Instalando algún software adicional
Vamos a utilizar setuptools para construir nuestro paquete. Esta herramienta la tendremos que instalar utilizando “pip” como hemos hecho para instalar otro software adicional durante el curso.
Empaquetando nuestra app
Empaquetar en Python se refiere a preparar nuestra aplicación en un formato específico que nos permita instalarla fácilmente para que se pueda utilizar. El propio “Django” viene empaquetado de forma muy similar. Para una aplicación pequeña como es nuestra aplicación, el proceso no es muy complicado.
Primero, tendremos que crear un directorio padre para nuestra aplicación que se encuentra fuera del proyecto Django. A este directorio lo vamos a llamar “django-polls”:
- Primero, creamos una carpeta padre para “polls”, fuera del proyecto Django. Llamaremos a esta carpeta “django-polls”.
- Después moveremos la carpeta “polls” dentro de la carpeta que acabamos de crear.
- Creamos un fichero “Django-polls/README.rst” que contenga lo siguiente:
django-polls/README.rst
=====
Polls
=====
Polls is a simple Django app to conduct Web-based polls. For each
question, visitors can choose between a fixed number of answers.
Detailed documentation is in the "docs" directory.
Quick start
-----------
1. Add "polls" to your INSTALLED_APPS setting like this::
INSTALLED_APPS = (
...
'polls',
)
2. Include the polls URLconf in your project urls.py like this::
url(r'^polls/', include('polls.urls')),
3. Run `python manage.py migrate` to create the polls models.
4. Start the development server and visit http://127.0.0.1:8000/admin/
to create a poll (you'll need the Admin app enabled).
5. Visit http://127.0.0.1:8000/polls/ to participate in the poll.
- Creamos un fichero “django-polls/LICENSE”. No os diremos qué tipo de licencia tenéis que escoger, pero si os comentamos que publicar un código sin licencia no es de ninguna utilidad. Django y muchas aplicaciones Django se distribuyen bajo la licencia BSD; sin embargo, uno puede elegir su propia licencia, teniendo en cuenta que ésta afecta a quién puede utilizar nuestro código.
- Luego vamos a crear un fichero “setup.py” el cual contiene los detalles sobre cómo construir e instalar la app. Os recomendamos que os dirijáis a la documentación de setuptools, ya que encontraréis una explicación detallada de cómo funciona este tipo de ficheros. Creamos el fichero “django-polls/setup.py” con el siguiente contenido:
django-polls/setup.py
import os
from setuptools import setup
with open(os.path.join(os.path.dirname(__file__), 'README.rst')) as readme:
README = readme.read()
# allow setup.py to be run from any path
os.chdir(os.path.normpath(os.path.join(os.path.abspath(__file__), os.pardir)))
setup(
name='django-polls',
version='0.1',
packages=['polls'],
include_package_data=True,
license='BSD License', # example license
description='A simple Django app to conduct Web-based polls.',
long_description=README,
url='http://www.example.com/',
author='Your Name',
author_email='yourname@example.com',
classifiers=[
'Environment :: Web Environment',
'Framework :: Django',
'Intended Audience :: Developers',
'License :: OSI Approved :: BSD License', # example license
'Operating System :: OS Independent',
'Programming Language :: Python',
# Replace these appropriately if you are stuck on Python 2.
'Programming Language :: Python :: 3',
'Programming Language :: Python :: 3.2',
'Programming Language :: Python :: 3.3',
'Topic :: Internet :: WWW/HTTP',
'Topic :: Internet :: WWW/HTTP :: Dynamic Content',
],
)
- Sólo los módulos y paquetes Python se incluyen por defecto en el paquete. Para incluir archivos adicionales, necesitamos crear un archivo “MANIFEST.in”. La documentación sobre “distribute” referida en el paso anterior revisa este archivo en más detalle. Para incluir las plantillas y nuestro archivo “LICENSE”, creamos el archivo “django-polls/MANIFEST.in” con el siguiente contenido:
django-polls/MANIFEST.in
include LICENSEinclude README.rstrecursive-include polls/static *recursive-include polls/templates *
- Este paso es opcional, pero se recomienda, incluir documentación detallada con una app. Para ello, crearemos un directorio vacío “django-polls/docs” para la futura documentación. Agregamos una línea adicional al archivo “django-polls/MANIFEST.in”:
recursive-include docs *
Para que se incluya la carpeta “doc” en nuestro paquete es necesario que ésta contenga al menos un fichero.
- Vamos a intentar construir nuestro paquete con python “setup.py sdist” (para ejecutarlo deberemos estar dentro de la carpeta “django-polls”). Esto crea un directorio llamado “dist” y crea un nuevo paquete, “django-polls-0.1.tar.gz.”
Si queréis profundizar sobre cómo se empaqueta software podéis acceder al Tutorial sobre empaquetar y distribuir proyectos de la página de Python Packaging.
Utilizando nuestro paquete
Debido a que movimos el directorio “polls” fuera de nuestro proyecto, no funciona más. Pero para que la podamos volver a usar vamos a instalar nuestro nuevo paquete, “django-polls”.
Instalando como librería de usuario
Realizaremos este tipo de instalación ya que de este modo prevenimos que un paquete pueda afectar a los servicios del sistema o a otros usuarios del sistema. Para instalar el paquete usaremos “pip” como hemos ido haciendo cada vez que hemos querido una instalación en Python:
pip install --user django-polls/dist/django-polls-0.1.tar.gz
Una vez finalizada la instalación, nuestro proyecto “Django” debería funcionar correctamente de nuevo. Para confirmarlo arrancaremos nuestro servidor de desarrollo y ejecutaremos la aplicación. Para desinstalar el paquete, usaremos también “pip”:
pip uninstall django-polls
Publicando nuestra aplicación
Ahora que ya empaquetamos y hemos probado “django-polls”, está lista para compartirla con el mundo, si este no fuera sólo un ejemplo, uno podría:
- Enviar el paquete vía email a un amigo.
- Subir el paquete al sitio web propio.
- Subir el paquete a un repositorio público, como puede ser Python Package Index (PyPI). “python.org” tiene un buen tutorial para esto.
Instalando paquetes Python con virtualenv
Instalar la aplicación “polls” como librería de usuario tiene algunas desventajas:
- Modificar las librerías de usuario puede afectar otro software Python de nuestro sistema.
- No podemos ejecutar múltiples versiones de nuestro paquete (u otros con el mismo nombre).
Típicamente, estas situaciones sólo se presentan si uno mantiene varios proyectos Django. En ese caso, la mejor solución es usar “virtualenv”. Esta herramienta permite mantener múltiples ambientes Python aislados, cada uno con su propia copia de librerías y paquetes.
Y hasta aquí el tutorial relacionado con “Django”, os invitamos como siempre a que sigáis explorando este framework y probando. Pero el curso no finaliza aquí, os seguiremos haciendo entregas con más cosas interesantes sobre Python.
Y para todos los que se acaban de incorporar indicarles que tenemos un índice con todos los capítulos del curso, ya que nunca es tarde para empezar.