How do I subclass the build command?
The subject is self-descriptive: I need to subclass the setup.py build
command in order to perform additional build steps. However I've failed to find any build
command class to inherit from. I've been trying:
class BuildCommandProxy(setuptools.command.build):
pass
and
class BuildCommandProxy(distutils.command.build):
pass
and even:
class BuildCommandProxy(setuptools.distutils.command.build):
pass
without any success.
UPDATE: looking for how to implement something like this with setuptools
.
UPDATE2: I have some custom command implementation:
class CustomCommand(setuptools.Command):
# ...
What I would like to implement is to pass this command to cmdclass
like this:
cmdclass={
"build": CustomCommand,
}
and then invoke the original build
in CustomCommand.run
after doing some custom steps.
Solution 1:
Setuptools does not override the distutils
build
command itself; only the build_py
and build_ext
subcommands.
So, to create your own subclass you need to import from the distutils.command.build
module, which contains a build
class (subclass of Command
):
import distutils.command.build
class BuildCommandProxy(distutils.command.build.build):
pass
Solution 2:
For completeness, here is a full example of how to add custom build operations:
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})