Es una herramienta que replica todo un entorno de trabajo aislado. Esto es una buena práctica para experimentar con código y el estar familiarizado con estas herramientas será beneficioso para desarrollar e implantar aplicaciones.
Estas son sus principales características:
Basado en Python, es una utilidad escrita en el lenguaje de programación Python, esto le permite agregar nuevas extensiones vía módulos a la herramienta.
Sintaxis declarativa, permite definición de configuraciones buildout de forma declarativa, basada en el formato .INI de Windows, es decir, clave = valor, haciendo esto una ventaja a las otras herramientas de auto-construcción de proyectos ya que su sintaxis es de fácil entendimiento ya que esta es un lenguaje de configuración de alto nivel.
; last modified 1 April 2001 by John Doe
[owner]
name = John Doe
organization = Acme Widgets Inc.
[database]
; use IP address in case network name resolution is not working
server = 192.0.2.62
port = 143
file = "payroll.dat"
Este sistema de auto-construcción es súper sencillo de escribir esta basado en la configuraciones de archivo .ini de Windows, es decir, clave = valor mas adicionalmente ofrece el concepto de los recetas te permite usar tareas predefinidas para construir un servidor Zope, instalar un servidor de MySQL o PostgreSQL, o instalando lenguaje de programación como Python, PHP en fin.
Facilita el día a día del trabajo, Orientado al programador y administradores de sistemas.
Se puede replicar, eso quiere decir que puedes configurar que instalar, y como configurar cosas en tu proyecto con la finalidad de agilizar el despliegue de proyectos en entornos de desarrollo, pruebas y producción.
Integración con sistema de paquetes, es fácil trabajar con los formatos de paquetes Egg.
Para entender por que es de utilidad zc.buildout hay que conocer las cosas que conllevaron a su creación de herramienta hace unos años atrás la instalación de aplicaciones en Python que tenias muchas dependencias era un dolor de cabeza ya que tenia que instalar manualmente las dependencias en tu sistema para poder iniciar la instalación de tu aplicación, entonces la solución en ese momento fue crear un paquete de tipo bundle el cual consistía en un archivo comprimido con todos los módulos que son necesario compilar o instalar en el PYTHONPATH de tu interprete python.
Ventajas:
Desventajas:
Entonces paulatinamente la comunidad de Zope le fue natural que crearan un sistema de auto-construcción como Makefile o Apache Ant pero basado en Python que le ayuda a reconstruir sus instalaciones, entonces para esto crearon Buildout.
En ejemplo típico de Plone en entornos de producción no solo es Plone, sino un cacheo de contenidos, balanceo de cargas, motor de plantillas, servidor Web y todo esto se puede construir con Buildout.
Hasta puedes usar buildout para construir una instalación LAMP en este caso un ejemplo de como instalar Wordpress.
Desde la adopción de Plone de buildout se ha simplificado la instalaciones de Plone y se ha creado todo un sistema de replicación de entornos de trabajos al cual puedes acceder actualizaciones de módulos Python de forma mas sencilla a nivel administrativo.
Progresivamente fue natural que buildout implementara soporte a paquetes Egg, esto impulsado por la fundación Python como una norma de crear aplicaciones que puedan ser distribuidas baja su filosofía de módulos y paquetes. Esto causo que Zope siendo un paquete bundle se separa en muchos paquetes Egg y fue algo natural que Plone también ;)
“Buildout, es un Makefile con esteroides” -Francisco Palm.
Puedes instalar zc.buildout usando pip (es recomendable hacerlo dentro de un entorno virtual):
$ pip install zc.buildout
La herramienta zc.buildout funciona en base a los siguientes pasos ilustrados e descritos a continuación:
Usted puede agregar las configuraciones genéricas para todos sus proyectos Buildout, para esto debe ejecutar los siguientes comando:
$ mkdir $HOME/.buildout ; mkdir $HOME/.buildout/{downloads,eggs,extends,zope}
$ nano $HOME/.buildout/default.cfg
Luego de crear el archivo default.cfg defina algunas configuraciones de usuario predeterminadas para cualquier parte de su configuración buildout:
[buildout]
download-cache = /ruta/absoluta/al/home/del/usuario/.buildout/downloads
eggs-directory = /ruta/absoluta/al/home/del/usuario/.buildout/eggs
extends-cache = /ruta/absoluta/al/home/del/usuario/.buildout/extends
zope-directory = /ruta/absoluta/al/home/del/usuario/.buildout/zope
Nota
Esto solamente proveerá valores predeterminados, ¡éstos no sobrescribirán las configuraciones en su configuraciones buildout!
Ahora crea una nueva configuración zc.buildout así:
$ mkdir mibuildout ; cd mibuildout
$ buildout init
Ahora el nuevo directorio mibuildout es un proyecto buildout.
El archivo de configuración predeterminado del buildout es buildout.cfg. Después de inicializar, tendrá el siguiente contenido:
[buildout]
parts =
Puedes cambiarlo a:
[buildout]
parts = py
[py]
recipe = zc.recipe.egg
interpreter = python
eggs = zope.component
Ahora ejecuta el comando buildout disponible dentro del directorio mibuildout/bin sin ningún argumento. Esto creará un nuevo interprete Python dentro del directorio mibuildout/bin:
$ ./bin/buildout
Esto creará un nuevo intérprete Python dentro del directorio mibuildout/bin:
$ ./bin/python
Y luego tendrá a disposición en su PYTHONPATH el paquete que instalo zope.component, como se demuestra a continuación:
>>> import zope.component
Utilizando zc.buildout con la recipe llamado zc.recipe.egg se puede crear un intérprete python con los paquetes Egg especificados.
Este comando ejecutará un intérprete de python que puedes usar para ejecutar el código de su proyecto.
Para descargar el código fuente de este ejemplo ejecute el siguiente comando:
$ git clone https://github.com/plone-ve/buildout.basic.git
Este ejemplo intenta mostrar las capacidades del zc.buildout con el interprete python de su entorno de desarrollo.
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.
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.