Come posso aggiungere script post-installazione a easy_install / setuptools / distutils?

StackOverflow https://stackoverflow.com/questions/250038

  •  05-07-2019
  •  | 
  •  

Domanda

Vorrei poter aggiungere un hook al mio setup.py che verrà eseguito dopo l'installazione (o quando easy_install'ing o quando si fa python setup.py install).

Nel mio progetto, PySmell , ho alcuni file di supporto per Vim ed Emacs. Quando un utente installa PySmell nel solito modo, questi file vengono copiati nell'uovo reale e l'utente deve pescarli e posizionarli nelle sue directory .vim o .emacs. Quello che voglio è chiedere all'utente, dopo l'installazione, dove vorrebbe che questi file fossero copiati, o anche solo un messaggio che stampa la posizione dei file e cosa dovrebbe fare con loro.

Qual è il modo migliore per farlo?

Grazie

Il mio setup.py si presenta così:

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
from setuptools import setup

version = __import__('pysmell.pysmell').pysmell.__version__

setup(
    name='pysmell',
    version = version,
    description = 'An autocompletion library for Python',
    author = 'Orestis Markou',
    author_email = 'orestis@orestis.gr',
    packages = ['pysmell'],
    entry_points = {
        'console_scripts': [ 'pysmell = pysmell.pysmell:main' ]
    },
    data_files = [
        ('vim', ['pysmell.vim']),
        ('emacs', ['pysmell.el']),
    ],
    include_package_data = True,
    keywords = 'vim autocomplete',
    url = 'http://code.google.com/p/pysmell',
    long_description =
"""\
PySmell is a python IDE completion helper. 

It tries to statically analyze Python source code, without executing it,
and generates information about a project's structure that IDE tools can
use.

The first target is Vim, because that's what I'm using and because its
completion mechanism is very straightforward, but it's not limited to it.
""",
    classifiers = [
        'Development Status :: 5 - Production/Stable',
        'Environment :: Console',
        'Intended Audience :: Developers',
        'License :: OSI Approved :: BSD License',
        'Operating System :: OS Independent',
        'Programming Language :: Python',
        'Topic :: Software Development',
        'Topic :: Utilities',
        'Topic :: Text Editors',
    ]


)

EDIT:

Ecco uno stub che dimostra il python setup.py install :

from setuptools.command.install import install as _install

class install(_install):
    def run(self):
        _install.run(self)
        print post_install_message

setup(
    cmdclass={'install': install},
    ...

Nessuna fortuna con il percorso easy_install ancora.

È stato utile?

Soluzione

Dipende da come l'utente installa il tuo pacchetto. Se l'utente esegue effettivamente " setup.py install " ;, è abbastanza semplice: basta aggiungere un altro sottocomando al comando install (ad esempio install_vim), il cui metodo run () copierà i file desiderati nei punti in cui li desideri. È possibile aggiungere il sottocomando a install.sub_commands e passare il comando in setup ().

Se vuoi uno script post-installazione in un binario, dipende dal tipo di binario che stai creando. Ad esempio, bdist_rpm, bdist_wininst e bdist_msi supportano gli script post-installazione, poiché i formati di imballaggio sottostanti supportano gli script post-installazione.

bdist_egg non supporta un meccanismo di post-installazione in base alla progettazione:

http://bugs.python.org/setuptools/issue41

Altri suggerimenti

Come soluzione alternativa, è possibile impostare l'opzione zip_ok su false in modo che il progetto sia installato come directory decompressa, quindi sarà un po 'più facile per gli utenti trovare il file di configurazione dell'editor.

In distutils2, sarà possibile installare cose in più directory, comprese le directory personalizzate, e avere hook pre / post-installazione / rimozione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top