Pregunta

Quiero que mi 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 hacer mi acciones propias El problema que tengo es que todo funciona cuando hago un CD en el 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 vacío myfoobar.py 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 sucede incluso si importo " setup " e " instalar " de 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.

¿Fue útil?

Solución

No se puede hacer. Enthought tiene una versión personalizada de setuptools que admite esto, pero por lo demás está en el rastreador de errores como un elemento de la lista de deseos que ha estado en discusión desde junio.

Sin embargo, hay formas de engañar al sistema y puede considerarlas. Una forma es tener su módulo más importante, el que siempre se importa primero al usar su paquete, realizar las acciones posteriores a la instalación la primera vez que se llama. Luego debe limpiar después de usted 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 cualquier 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á allí, se salta el postinstall.

Otros consejos

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 Paver.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top