2013-01-27 8 views
6

Der Betreff ist selbstbeschreibend: Ich muss den Befehl setup.py build ableiten, um zusätzliche Build-Schritte auszuführen. Ich habe jedoch keine build Befehlsklasse gefunden, von der er erben könnte. Ich habe versucht:Wie unterlasse ich den Build-Befehl?

class BuildCommandProxy(setuptools.command.build): 
    pass 

und

class BuildCommandProxy(distutils.command.build): 
    pass 

und sogar:

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

ohne Erfolg.

UPDATE: Suche, wie so etwas wie this mit setuptools zu implementieren.

UPDATE2: Ich habe einige Implementierung benutzerdefinierten Befehl:

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

Was würde Ich mag es, implementieren, um cmdclass wie folgt um diesen Befehl zu übergeben:

cmdclass={ 
    "build": CustomCommand, 
} 

und dann das Original aufrufen build in CustomCommand.run nach einigen benutzerdefinierten Schritten.

+0

Sind Sie '' cmdclass' zu 'setup() vorbei? Bitte poste relevante Teile von 'setup.py'. – ecatmur

Antwort

8

Setuptools überschreibt nicht den distutilsbuild Befehl selbst; nur die build_py und build_ext Unterbefehle.

also Ihre eigene Unterklasse erstellen Sie aus den distutils.command.buildModul importieren müssen, die enthält eine build Klasse (Unterklasse von Command):

import distutils.command.build 

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

Für Vollständigkeit, hier ist ein vollständiges Beispiel dafür, wie hinzuzufügen benutzerdefinierte Operationen bauen:

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})