Buildout
Buildout es una herramienta para administrar y organizar las partes de un desarrollo con Python.
Qué es buildout
Una herramienta para administrar, a través de un archivo de configuración declaratoria, las partes y componentes de un desarrollo con Python. Dichas partes no están limitadas a componentes o código Python. La parte más poderosa de buildout es que puede extenderse con el uso de "recetas" que pueden instalar componentes más complicados simplemente agregando nuevas secciones a la configuración. Buildout puede instalar diversos paquetes de Python fácilmente porque está conectado con el índice de paquetes de Python (http://www.python.org/pypi).
Algunos términos importantes
- Instalación de Zope. El software propio del servidor de aplicaciones.
- Instancia de Zope. Un directorio específico que contiene una configuración completa de Zope.
- Paquete de Python. Básicamente, una carpeta con código Python que contiene un archivo __init__.py.
- Producto de Zope. Un paquete de Python especial para extender Zope.
- Huevo (Python egg). Un mecanismo para empaquetar y distribuir paquetes de Python.
- Cheese shop (PYPI). Un repositorio de paquetes de Python.
- easy_install. Un script de línea de comando que permite instalar a través de la red paquetes del PYPI.
Prerequisitos
Existen instrucciones detalladas para la instalación de requisitos, pero en general se necesita lo siguiente:
- Python 2.4.x.
- Python setuptools (easy_install)
- Para Zope, ZopeSkel (egg).
- Para Plone, Python Imaging Library (PIL) instalado en ese Python.
- Algunas distribuciones de Linux requieren el paquete python-profiler por separado.
Creación de un buildout
$ paster create -t plone3_buildout buildout Selected and implied templates: ZopeSkel#plone3_buildout A buildout for Plone 3 projects Variables: egg: buildout package: buildout project: buildout Enter zope2_install (Path to Zope 2 installation; leave blank to fetch one) ['']: <si ya se tiene una instalación de Zope se puede usar poniendo aquí el path> Enter plone_products_install (Path to directory containing Plone products; leave blank to fetch one) ['']: <lo mismo aquí si ya se tienen los productos de Plone> Enter zope_user (Zope root admin user) ['admin']: <el usuario administrador del sitio> Enter zope_password (Zope root admin password) ['']: <el password para este usuario> Enter http_port (HTTP port) [8080]: <el puerto donde escuchará el servicio de Zope> Enter debug_mode (Should debug mode be "on" or "off"?) ['off']: <'on' para activar el modo de debug> Enter verbose_security (Should verbose security be "on" or "off"?) ['off']: <'on' para presentar detalles cuando ocurran errores de privilegios> ... ... ... ----------------------------------------------------------- Generation finished You probably want to run python bootstrap.py and then edit buildout.cfg before running bin/buildout -v See README.txt for details -----------------------------------------------------------
Activación de un buildout
$ cd unam.buildout $ python2.4 bootstrap.py ... ... ... $ bin/buildout ... ... ... $ bin/instance start
Directorios creados
- bin. Ejecutables de buildout y producidos por las partes.
- eggs. Los eggs obtenidos e instalados de PYPI.
- downloads. Software adicional descargado.
- var. Logs y archivo de ZODB de Zope (buildout nunca sobreescribe estos archivos).
- src. Código fuente de nuestros desarrollos.
- products. Productos tradicionales de zope.
- parts. Todo el código, configuración y datos manejados por buildout.
Ejemplo
[buildout]
# definicion de las partes que va a tener el buildout, cada parte es una
# sección de configuración y generalmente utiliza una receta específica
parts =
plone
zope2
productdistros
instance
zopepy
# ligas adicionales a pypi.python.org donde pueden encontrarse eggs
find-links =
http://dist.plone.org
http://download.zope.org/ppix/
http://download.zope.org/distribution/
http://effbot.org/downloads
# Agregar eggs adicionales aquí
# elementtree es requerido por Plone
eggs =
elementtree
# Por cada paquete en desarrollo (dentro de src) se debe agregar una línea
# e.g.: develop = src/my.package
develop =
# Esta receta instala Plone, si se desea se puede especificar la versión
# e.g.: recipe = plone.recipe.plone>=3.1.1,<3.2
[plone]
recipe = plone.recipe.plone
# Esta receta instala zope 2. Para usar la misma url que requier plone se
# utiliza ${plone:zope2-url}. Es posible referirse con esta sintaxis a
# cualquier variable de una de las partes, así: ${parte:variable}
[zope2]
recipe = plone.recipe.zope2install
url = ${plone:zope2-url}
# Ligas a distribuciones de productos tradicionales de Zope.
# En nested-packages se pone el nombre del archivo (sin path) cuando
# una distribución incluye varios productos.
[productdistros]
recipe = plone.recipe.distros
urls =
nested-packages =
version-suffix-packages =
# esta receta inicializa la instancia de zope y utiliza los datos de las
# respuestas que se dieron al crear el buildout
[instance]
recipe = plone.recipe.zope2instance
zope2-location = ${zope2:location}
user = admin:admin
http-address = 8080
debug-mode = on
verbose-security = on
# Aquí se deben listar todos los eggs que zope debe poder ver
# incluyendo los de desarrollo que se definen arriba
# e.g. eggs = ${buildout:eggs} ${plone:eggs} my.package
eggs =
${buildout:eggs}
${plone:eggs}
# Activar la inicialización de zcml de los paquetes que lo requieran
# e.g. zcml = my.package my.other.package
zcml =
# Directorios donde zope buscará productos
products =
${buildout:directory}/products
${productdistros:location}
${plone:products}
# Interpreté de python generado con todos los paquetes activados en
# el path
[zopepy]
recipe = zc.recipe.egg
eggs = ${instance:eggs}
interpreter = zopepy
extra-paths = ${zope2:location}/lib/python
scripts = zopepy

