2010-01-29 10 views
9

Como parte del proceso de configuración de mi proyecto, necesito vincular simbólicamente uno de los paquetes a un directorio específico para que un script init.d pueda encontrarlo. ¿Hay alguna manera de agregar esto como un comando de post-procesamiento al setup()? Incluso me conformaría con crear otro archivo que creara el enlace y lo pasara al setup() como parte de alguna lista kwarg de "ejecutar estos" (si tal opción existe).Utilice distribuir/configurar herramientas para crear un enlace simbólico (o ejecutar script)?

setup(
    ... 
    packages = find_packages('src'), 
    package_dir = {'': 'src'}, 
    install_requires = ..., 
    data_files = [('/etc/init.d', ['scripts/foo'])], 
    ... 
) 

que foo script espera uno de los paquetes de src/ a tener un enlace simbólico al directorio en otro lugar (por ejemplo, no simplemente estar en PYTHONPATH). ¿Hay alguna manera de lograr eso?

Respuesta

4

Actualmente, solo las herramientas de administración de paquetes específicas de la plataforma (por ejemplo, instaladores RPM, deb, win32) tienen la capacidad de ejecutar pasos posteriores a la instalación: distutils, setuptools, etc. no son compatibles con esto directamente. (Excepto en la medida de que le permite construir el instalador RPM, ventanas, etc.)

Por lo tanto, la forma más sencilla de hacer esto sin un instalador específico de la plataforma, es crear un script de postinstalación de su propia, o agregue una opción postinstalación a un script suyo existente y pídales a los usuarios que lo ejecuten. De lo contrario, tendrá que usar bdist_rpm o uno de los otros comandos bdist para construir un instalador para la (s) plataforma (s) apropiada (s).

0

Ampliando la respuesta de @ pjeby, también puede extender el comando de instalación para agregar sus propios pasos postinstalados personalizados. Sin embargo, eso solo funcionará cuando se realice la instalación desde la fuente (es decir, ejecutar setup.py) y otros instaladores como RPM y MSI ignorarán silenciosamente sus cambios.

EDITAR: Encontrado esto después de algunas google, parece que debe no tratar de crear los enlaces simbólicos en solitario: http://docs.python.org/2/install/index.html#alternate-installation

4

Sé que este post tiene varios años pero quería ofrecer una actualización ese código de posprocesamiento es posible en setup.py. Para abreviar, debe anular la función de instalación de las herramientas de configuración, pero a partir de ese momento puede agregar el código que desee, como copiar enlaces simbólicos que MANIFEST.in se niega a copiar. Tomado de Peter Lamut's solution.

from setuptools.command.install import install 

class CustomInstallCommand(install): 
    """Customized setuptools install command - prints a friendly greeting.""" 
    def run(self): 
     print "Hello, developer, how are you? :)" 
     install.run(self) 
     #post-processing code 
setup(
    ... 
    cmdclass={ 
     'install': CustomInstallCommand, 
    }, 
    ... 
) 
+1

Hélio Guilherme me notificó que el enlace a la publicación de mi blog estaba muerto. Edité tu publicación para hacer que el enlace vuelva a estar activo. Me alegra que lo haya encontrado útil, por cierto. – plamut

Cuestiones relacionadas