Scaffolding en proyectos Python

Scaffolding en Python

La estructura del paquete Egg Python es poco compleja. Por lo cual para empezar con su primer proyecto y diversos módulos, puede usar el concepto Scaffolding para crear un esqueleto de código usando las plantillas adecuadas para paquetes Python.

Este concepto scaffolding, es muy útil para del arranque de su desarrollo, ofreciendo una serie de colecciones de plantillas esqueletos que permiten iniciar rápidamente proyectos, existente diversos esqueletos orientados a tipos de desarrollos específicos.

¿Qué es PasteScript?

Es una herramienta de linea de comando basada en plugins que le permiten crear estructuras de paquetes de proyectos Python además sirve aplicaciones web, con configuraciones basadas en paste.deploy.

Instalación

Dentro de su entorno virtual activado debe instalar el paquete PasteScript, ejecutando el siguiente comando:

(python)$ pip install PasteScript

Nota

No olvidar que estos paquetes han sido instalados con el entorno virtual que previamente usted activo, eso quiere decir que los paquetes previamente instalados con easy_install están instalados en el directorio ~/virtualenv/python/lib/python2.x/site-packages/ en ves del directorio de su versión de Python de sistema /usr/lib/python2.x/site-packages/

Al finalizar la instalación podrá opcionalmente consultar cuales plantillas tiene disponible para usa, ejecutando el siguiente comando:

(python)$ paster create --list-templates
  Available templates:
    basic_package:       A basic setuptools-enabled package
    paste_deploy:        A web application deployed through paste.deploy

Usted puede usar el comando paster para crear paquetes Python.

(python)$ paster create -t basic_package mipaquetepython

  Selected and implied templates:

    PasteScript#basic_package  A basic setuptools-enabled package

  Variables:
    egg:      mipaquetepython
    package:  mipaquetepython
    project:  mipaquetepython
  Enter version (Version (like 0.1)) ['']: 0.1
  Enter description (One-line description of the package) ['']: Mi Paquete Básico
  Enter long_description (Multi-line description (in reST)) ['']: Mi Paquete Básico para demostrar el uso de PasteScript
  Enter keywords (Space-separated keywords/tags) ['']: PasteScript Basic Package Demo
  Enter author (Author name) ['']: Pedro Picapiedra
  Enter author_email (Author email) ['']: pedro@acme.com
  Enter url (URL of homepage) ['']: http://github.com/pyve/mipaquetepython
  Enter license_name (License name) ['']: GPL
  Enter zip_safe (True/False: if the package can be distributed as a .zip file) [False]:
  Creating template basic_package
  Creating directory ./mipaquetepython
    Recursing into +package+
      Creating ./mipaquetepython/mipaquetepython/
      Copying __init__.py to
      ./mipaquetepython/mipaquetepython/__init__.py
    Copying setup.cfg to ./mipaquetepython/setup.cfg
    Copying setup.py_tmpl to ./mipaquetepython/setup.py
  Running /home/macagua/virtualenv/python/bin/python setup.py egg_info

Usted puede verificar el paquete previamente creado y observará como este paquete básico ha habilitado el Setuptools

(python)$ tree mipaquetepython/
  mipaquetepython/
  |-- mipaquetepython
  |   `-- __init__.py
  |-- mipaquetepython.egg-info
  |   |-- PKG-INFO
  |   |-- SOURCES.txt
  |   |-- dependency_links.txt
  |   |-- entry_points.txt
  |   |-- not-zip-safe
  |   `-- top_level.txt
  |-- setup.cfg
  `-- setup.py

Para instalar este paquete ejecute el siguiente comando:

(python)$ cd mipaquetepython/mipaquetepython/
(python)$ vim app.py

Escriba un simple código que solicita un valor y luego lo muestra:

var = raw_input("Introduzca alguna frase: ")
print "Usted introdujo: ", var

Guarde los cambios en el archivo app.py, luego importe su aplicación app.py en el archivo __init__.py con el siguiente código fuente:

from mipaquetepython import app

Para comprobar su instalación ejecute el siguiente comando:

(python)$ python

Y realice una importación del paquete mipaquetepython ejecutando el siguiente comando:

>>> import mipaquetepython
Introduzca alguna frase: Esta cadena
Usted introdujo:  Esta cadena
>>> exit()

De esta forma tienes creado un paquete Egg Python.

Esqueletos en diversos proyectos Python

A continuación se muestran algunos esqueletos útiles:

  • Esqueletos de proyectos Zope/Plone.

  • Esqueletos de proyectos OpenERP.

    Nota

    OpenERP, es un sistema ERP y CRM programado con Python, de propósito general.

  • Esqueletos de proyectos Django:

    Nota

    Django, es un Framework Web Python, de propósito general.

    • django-project-templates, plantillas Paster para crear proyectos Django.
    • fez.djangoskel, es una colección de plantillas Paster para crear aplicaciones Django como paquetes Egg.
    • django-harness, es una aplicación destinada a simplificar las tareas típicas relacionadas con la creación de un sitio web hechos con Django, el mantenimiento de varias instalaciones (local, producción, etc) y cuidando su instalación global y su estructura de “esqueleto” actualizado del sitio de manera fácil.
    • lfc-skel, Provee una plantilla para crear una aplicación django-lfc CMS.
  • Esqueletos de proyectos Pylons:

    Nota

    Pylons, es un Framework Web Python, de propósito general.

    • Pylons, al instalarse usando la utilidad easy_install instala dos plantillas de proyectos Pylons.
    • PylonsTemplates, le ofrece plantillas adicionales paster para aplicaciones Pylons, incluyendo implementación de repoze.what.
    • BlastOff, Una plantilla de aplicación Pylons que proporciona un esqueleto de entorno de trabajo configurado con SQLAlchemy, mako, repoze.who, ToscaWidgets, TurboMail, WebFlash y (opcionalmente) SchemaBot. La aplicación generada esta previamente configurada con autenticación, inicio de sesión y formularios de registro, y (opcionalmente) confirmación de correo electrónico. BlastOff ayudar a acelerar el desarrollo de aplicaciones en Pylons por que genera un proyecto con una serie de dependencias configuraciones previamente.
  • Esqueletos de proyectos CherryPy:

    Nota

    CherryPy, es un MicroFramework Web Python, de propósito general.

  • Esqueletos de proyectos Trac:

    Nota

    Trac, es un sistema de gestión de proyectos de desarrollos de software.

    • TracLegosScript, TracLegos es un software diseñado para ofrecer plantillas para proyectos Trac y asiste con la creación de proyecto trac.
    • trac_project, Plantilla de proyecto Trac de software de código abierto.

Recomendaciones

Si desea trabajar con algún proyecto de desarrollo basado en esqueletos o plantillas paster y Buildout simplemente seleccione cual esqueleto va a utilizar para su desarrollo y proceso a instalarlo con easy_install o PIP (como se explico anteriormente) y siga sus respectivas instrucciones para lograr con éxito la tarea deseada.

Descarga código fuente

Para descargar el código fuente de este ejemplo ejecute el siguiente comando:

$ svn co https://svn.plone.org/svn/collective/spanishdocs/tags/0.1rc/src/mini-tutoriales/mipaquetepython/ mipaquetepython

Referencias

los comentarios son proporcionados por Disqus

Editar este documento

El código fuente de este archivo esta hospedado en GitHub. Todos pueden actualizar y corregir errores en este documento con unos clic - sin necesidad de descargar.

  1. Vaya hacia el articulo Scaffolding en proyectos Python en GitHub.
  2. Presione el botón Fork. Este creara su propia copia personal de la documentación.
  3. Edite los archivos usando el editor de texto de GitHub desde su navegador Web
  4. Rellene en la caja de texto Commit message al final de la pagina indicando por que usted realizo estos cambios. Presione el botón Propose file change próximo a ese cuando haya finalizado.
  5. Luego diríjase a la página Send a pull request (no será necesario rellenar ningún texto adicional). Sólo tiene que pulsar el botón Send pull request.
  6. Sus cambios serán consultados por un revisor dentro de la pestaña Pull requests del proyecto en Github.

Para mas información básica acerca de como actualizar este manual y referencia a sintaxis Sphinx, por favor consulte la guía Escribiendo y actualizando el manual.