jueves, octubre 25, 2007

Probando distutils

Sobre distutils ya había hablado en: Instalando con Python.

Recientemente hemos cambiado tanto la estructura del proyecto en el subversion como en la instalación, con lo cual los antiguos setup.py ya no nos sirven (hechos para distutils).

Pero no solo queda ahí la cosa, sino que vamos a instalar con rpms. Una opción hubira sido el crear ls 'specs' de los rpms a manubrio, pero me han recomendado hacerlo con distutils, y luego si hay que modificar algo, pues hacerlo, pero de esta manera no las tienes que crear desde cero.

La verdad.... me parece una muy buena idea, pero no sólo por ese posible ahorre de trabajo, sino que ademas podemos seguir desplegando de la manera normal (directamente) o generar un tar.gz.

Todo son ventajas...

Tras hacer el setup.py he mirado a ver que diferencias hay con setuptools [ibm article]. Por lo que parece son similares; siendo la mayor ventaja que ofrece setuptools, que te busca los paquetes a instalar y se asegura de resolver las dependencias.
Otra cosa que permite setuptools es generar 'eggs files'; y contiene EasyInstall.

Volviendo al tema que nos ocupa... cuando tienes una estructura un poco complicada no te queda mas remedio que meter en el setup.py funciones de utilidad para tu problemática concreta.

En mi caso, el mayor problemilla que he tenido es que las rutas de instalación y del SVN no son exactas, con lo cual tengo que hacer un mapeo entre el paquete que se instala, y la ruta donde está el código.

Esto se solventa con los parametros packages y package_dir, lo que hago es recorrer recursivamente el arbol del SVN para obtener las rutas a los paquetes, para a partir de ellas generar el nombre del paquete destino y definir a que directorio del SVN se corresponde.

En el caso de los datos, el parametro data_files, permite resolver esta problemática sin necesidad de ningun parámetro adicional.

Como documentación, el artículo que enlacé antes (Spreading python applications) está muy bien; asi como la documentación estándar.

Un par de notas finales:
  • para pruebas podeis usar la opción --dry-run
  • con --verbose os indica si os faltan ficheros __init__.py

No hay comentarios: