2013-01-27 9 views
6

Il soggetto è auto-descrittivo: ho bisogno di sottoclasse il comando setup.py build per eseguire ulteriori passi di costruzione. Tuttavia non ho trovato nessuna classe di comando build da cui ereditare. Ho provato:Come creare una sottoclasse del comando di compilazione?

class BuildCommandProxy(setuptools.command.build): 
    pass 

e

class BuildCommandProxy(distutils.command.build): 
    pass 

e anche:

class BuildCommandProxy(setuptools.distutils.command.build): 
    pass 

senza alcun successo.

UPDATE: cercare come implementare qualcosa come this con setuptools.

UPDATE2: ho qualche implementazione comando personalizzato:

class CustomCommand(setuptools.Command): 
    # ... 

Quello che mi piacerebbe implementare è quello di passare questo comando per cmdclass in questo modo:

cmdclass={ 
    "build": CustomCommand, 
} 

e quindi richiamare l'originale build in CustomCommand.run dopo aver eseguito alcuni passaggi personalizzati.

+0

Passate 'cmdclass' a' setup() '? Per favore pubblica parti rilevanti di 'setup.py'. – ecatmur

risposta

8

Setuptools non sovrascrive il comando distutilsbuild; solo i sottocomandi build_py e build_ext.

Così, per creare la propria sottoclasse è necessario importare dal modulodistutils.command.build, che contiene una build classe (sottoclasse di Command):

import distutils.command.build 

class BuildCommandProxy(distutils.command.build.build): 
    pass 
1

Per completezza, ecco un esempio completo di come per aggiungere operazioni di compilazione personalizzate:

import distutils.command.build 

# Override build command 
class BuildCommand(distutils.command.build.build): 

    def run(self): 
     # Run the original build command 
     distutils.command.build.build.run(self) 
     # Custom build stuff goes here 

# Replace the build command with ours 
setup(..., 
     cmdclass={"build": BuildCommand}) 
Problemi correlati