如何对构建命令进行子类化?
这个话题说得很清楚:我需要对 setup.py build
这个命令进行扩展,以便添加一些额外的构建步骤。不过我找不到可以继承的 build
命令类。我尝试过:
class BuildCommandProxy(setuptools.command.build):
pass
还有
class BuildCommandProxy(distutils.command.build):
pass
甚至还有:
class BuildCommandProxy(setuptools.distutils.command.build):
pass
但都没有成功。
更新:我想知道如何用 setuptools
实现类似于 这个 的功能。
更新2:我有一些自定义命令的实现:
class CustomCommand(setuptools.Command):
# ...
我想实现的是将这个命令传递给 cmdclass
,像这样:
cmdclass={
"build": CustomCommand,
}
然后在执行一些自定义步骤后,在 CustomCommand.run
中调用原始的 build
。
2 个回答
3
为了让内容更完整,这里有一个关于如何添加自定义构建操作的完整示例:
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})
13
Setuptools并不会直接替代distutils
里的build
命令,它只会替代build_py
和build_ext
这两个子命令。
所以,如果你想创建自己的子类,就需要从distutils.command.build
这个模块中导入,因为里面有一个build
类(它是Command
的子类):
import distutils.command.build
class BuildCommandProxy(distutils.command.build.build):
pass