Instalación de scripts Python desde automake...

He estado trabajando en hacer más fácil para los desarrolladores compilar e instalar Membase, y hoy he aprendido un poco más de magia automake. Soy uno de esos desarrolladores que no quieren pasar mucho tiempo trabajando en el sistema de compilación, quiero pasar mi tiempo trabajando en el código. Al mismo tiempo no quiero hacer trabajo manual innecesario y aburrido que el sistema de compilación debería hacer por mí.

Partes de Membase se implementan en Python, y he estado tratando de averiguar cómo instalar esas piezas. No me gusta desordenar el directorio /bin con archivos de "biblioteca", así que necesitaba una manera de empaquetar mejor los bits de Python. He estado usando un script de envoltura que establece la variable PYTHONPATH antes, pero nunca he tratado de integrar eso en un makefile generado por automake.

Como siempre empecé pidiendo ayuda a google, pero no terminé con un ejemplo bueno y fácil así que terminé leyendo el manual de automake. Resulta que es bastante fácil de hacer exactamente lo que quiero, así que decidí compartir los conocimientos en una entrada del blog :-)

No queremos codificar la ruta a nuestro binario en cualquier lugar, así que lo primero que tenemos que hacer es actualizar configure.ac para generar también nuestro script de envoltura:

AC_CONFIG_FILES(Makefile python_wrapper)

Tengo múltiples programas implementados con Python, y no quiero crear una tonelada de envoltorios, por lo que mi python_wrapper.in se parece:

¡#! /bin/sh
if test -z "${PYTHONPATH}"; then
   PYTHONPATH=@libdir@/python
si no
   PYTHONPATH=@libdir@/python:${PYTHONPATH}
fi
export PYTHONPATH
exec @libdir@/python/nombre base $0.py "$@"

Esto significa que si instalo este script como /opt/membase/bin/stats, intentará ejecutar /opt/membase/lib/python/stats.py con los mismos argumentos. Así que vamos a seguir adelante y añadir una regla a Makefile.am para generar los scripts con los nombres correctos:

PYTHON_TOOLS=stats
${PYTHON_TOOLS}: python_wrapper
    cp $< $@

BUILT_SOURCES += ${PYTHON_TOOLS}
CLEANFILES+= ${PYTHON_TOOLS}
bin_SCRIPTS+= ${PYTHON_TOOLS}

Ahora tenemos el script wrapper en su lugar, y hemos generado todos los scripts para iniciar nuestros programas. Lo siguiente sería crear el directorio de destino para los bits de python, e instalarlos todos allí. Para ello tenemos que crear una variable que termina con "dir" para contener el nombre del directorio. Llamemos a nuestro "pythonlibdir" y pongámoslo en un subdirectorio llamado python del libdir especificado:

pythonlibdir=$(libdir)/python

Por último, tenemos que enumerar todos los archivos que queremos que vayan allí:

pythonlib_DATA=
                mc_bin_client.py
                mc_bin_server.py
                memcacheConstants.py
 
pythonlib_SCRIPTS=
                stats.py

La razón por la que uso pythonlib_SCRIPTS para el último es porque quiero que el bit de ejecución se establezca en el archivo.

Comparte este artículo
Recibe actualizaciones del blog de Couchbase en tu bandeja de entrada
Este campo es obligatorio.

Autor

Publicado por Trond Norbye, Desarrollador Senior, Couchbase

Trond Norbye es Arquitecto de Software en Couchbase. Colaborador principal de los proyectos Couchbase y Memcached. Creó las bibliotecas de cliente C/C++ y node.js de Couchbase.

Deja un comentario

¿Listo para empezar con Couchbase Capella?

Empezar a construir

Consulte nuestro portal para desarrolladores para explorar NoSQL, buscar recursos y empezar con tutoriales.

Utilizar Capella gratis

Ponte manos a la obra con Couchbase en unos pocos clics. Capella DBaaS es la forma más fácil y rápida de empezar.

Póngase en contacto

¿Quieres saber más sobre las ofertas de Couchbase? Permítanos ayudarle.