如何对构建命令进行子类化?

13 投票
2 回答
4028 浏览
提问于 2025-04-17 13:48

这个话题说得很清楚:我需要对 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_pybuild_ext这两个子命令。

所以,如果你想创建自己的子类,就需要从distutils.command.build这个模块中导入,因为里面有一个build类(它是Command的子类):

import distutils.command.build

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

撰写回答