¿Cómo hacer que easy_install ejecute comandos personalizados en setup.py?

Quiero que setup.py realice algunas acciones personalizadas además de instalar el paquete Python (como instalar un script init.d, crear directorios y archivos, etc.) Sé que puedo personalizar las clases distutils / setuptools para que realicen mis propias acciones. El problema que tengo es que todo funciona cuando cd al directorio del paquete y hago “python setup.py install”, pero mis clases personalizadas no parecen ejecutarse cuando hago “easy_install mypackage.tar.gz”. Aquí está mi archivo setup.py (cree un archivo myfoobar.py vacío en el mismo directorio para probar):

import setuptools from setuptools.command import install as _install class install(_install.install): def initialize_options(self): _install.install.initialize_options(self) def finalize_options(self): _install.install.finalize_options(self) def run(self): # Why is this never executed when tarball installed with easy_install? # It does work with: python setup.py install import pdb;pdb.set_trace() _install.install.run(self) setuptools.setup( name = 'myfoobar', version = '0.1', platforms = ['any'], description = 'Test package', author = 'Someone', py_modules = ['myfoobar'], cmdclass = {'install': install}, ) 

Lo mismo ocurre incluso si importo “setup” e “install” desde distutils. ¿Alguna idea de cómo podría hacer que easy_install ejecute mis clases personalizadas?

Para aclarar, no quiero usar nada extra, como Buildout o Paver.

No se puede hacer. Enthought tiene una versión personalizada de setuptools que sí lo admite, pero de lo contrario, se encuentra en el rastreador de errores como un elemento de lista de deseos que ha estado en discusión desde junio.

Sin embargo, hay maneras de engañar al sistema y usted podría considerarlas. Una forma es tener su módulo más importante, el que siempre se importa primero cuando usa su paquete, realice las acciones posteriores a la instalación la primera vez que se le llame. Luego debe limpiar después de sí mismo y considerar el caso en el que no puede escribir en la biblioteca porque un administrador instaló el paquete y el primer usuario es alguien que no es administrador.

En el peor de los casos, esto implicaría crear un directorio ~ / .mypackage para cada usuario que use el paquete, y volver a ejecutar el postinstall una vez para cada nuevo usuario. Cada vez que se importa el módulo, verifica la existencia de ~ / .mypackage. Si no está allí, ejecuta el postinstall y lo crea. Si está ahí, se salta el postinstall.

La pavimentadora lleva las herramientas de configuración al siguiente nivel y le permite escribir tareas personalizadas. Le permite extender el archivo setup.py típico y proporciona una forma sencilla de iniciar el entorno de la pavimentadora.