Domanda

Devo eseguire un semplice script dopo aver installato i moduli e i programmi.Ho qualche problema a trovare documentazione semplice su come eseguire questa operazione.Sembra che debba ereditare da distutils.command.install, sovrascrivere alcuni metodi e aggiungere questo oggetto allo script di installazione.I dettagli però sono un po' confusi e sembra un grande sforzo per un hook così semplice.Qualcuno conosce un modo semplice per farlo?

È stato utile?

Soluzione

Ho scavato attraverso fonte distutils per una giornata per imparare abbastanza per fare un mucchio di comandi personalizzati. Non è bello, ma funziona.

import distutils.core
from distutils.command.install import install
...
class my_install(install):
    def run(self):
        install.run(self)
        # Custom stuff here
        # distutils.command.install actually has some nice helper methods
        # and interfaces. I strongly suggest reading the docstrings.
...
distutils.core.setup(..., cmdclass=dict(install=my_install), ...)

Altri suggerimenti

OK, ho capito. L'idea è sostanzialmente quella di estendere uno dei comandi Distutils e sovrascrivere il metodo run. A dire distutils per utilizzare la nuova classe è possibile utilizzare la variabile cmdclass.

from distutils.core import setup
from distutils.command.install_data import install_data

class post_install(install_data):
    def run(self):
        # Call parent 
        install_data.run(self)
        # Execute commands
        print "Running"

setup(name="example",
      cmdclass={"install_data": post_install},
      ...
      )

Spero che questo vi aiuterà a qualcun altro.

Non ho potuto fare Joe Wreschnig s lavoro risposta e ottimizzato la sua risposta analoga a Distutils estendono documentazione . Sono venuto con questo codice che funziona bene sulla mia macchina.

from distutils import core
from distutils.command.install import install
...
class my_install(install):
    def run(self):
        install.run(self)
        # Custom stuff here
        # distutils.command.install actually has some nice helper methods
        # and interfaces. I strongly suggest reading the docstrings.
...
distutils.core.setup(..., cmdclass={'install': my_install})

Nota:. Non ho modificare la risposta di Joe da quando sono incerto perché la sua risposta non funzionava sulla mia macchina

Ho ricevuto un errore quando ho provato la risposta accettata qui (potrebbe essere perché sto usando Python 2.6 in questo caso particolare, non ne sono sicuro).Ciò si è verificato sia per "setup.py install" che per "pip install":

sudo python setup.py install

fallisce con errore:errore in setup.cfg:il comando 'my_install' non ha l'opzione 'single_version_externally_activate'

E

sudo pip install . -U

fallisce in modo più prolisso ma anche con errore:opzione --versione singola gestita esternamente non riconosciuta

Variazione sulla risposta accettata

Sostituzione delle importazioni da distutils con setuptools mi ha risolto il problema:

from setuptools import setup
from setuptools.command.install import install
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top