Python 如何将setuptools命令选项从install传递到build命令?
我有一个带有用户选项的自定义Python 如何将setuptools命令选项从install传递到build命令?,python,setuptools,Python,Setuptools,我有一个带有用户选项的自定义build命令: class BuildCommand(distutils.command.build.build): user_options = [('foo', None, 'Foo')] 添加如下内容: setup(... cmdclass={"build": BuildCommand} ...) 如果我运行python setup.py build--foo,它会工作得很好。但是,在运行install或develope时也会调用
build
命令:
class BuildCommand(distutils.command.build.build):
user_options = [('foo', None, 'Foo')]
添加如下内容:
setup(...
cmdclass={"build": BuildCommand}
...)
如果我运行
python setup.py build--foo
,它会工作得很好。但是,在运行install
或develope
时也会调用build
,因此我希望这些命令具有相同的选项并将其传递给build。我该怎么做呢?我找到了两种方法来实现这一点(至少对于setuptools
,我没有尝试使用原始distutils
),这两种方法我都不是特别喜欢,但它们似乎确实有效:
distclass
,使用全局选项:
class FooDistribution(setuptools.Distribution):
global_options = setuptools.Distribution.global_options + [
('foo', None, 'Foo'),
]
def __init__(self, attrs=None):
self.foo = 0
super().__init__(attrs)
setup(
...
distclass=FooDistribution,
...
)
然后,您可以通过self.distribution.foo
从命令类访问它。在第一个命令之前,需要在命令行上传递选项set\u undefined\u options
:
from distutils.command.build import build as build_orig
from setuptools.command.install import install as install_orig
from setuptools.command.develop import develop as develop_orig
cmdclass = {}
for super_class in [build_orig, install_orig, develop_orig]:
class command(super_class):
user_options = super_class.user_options + [
('foo', None, 'Foo'),
]
def initialize_options(self):
super().initialize_options()
self.foo = None
cmdclass[super_class.__name__] = command
def run_build(self):
print("self.foo: ", self.foo)
def finalize_options_build(self):
build_orig.finalize_options(self)
for cmd in ['install', 'develop']:
self.set_undefined_options(cmd,
('foo', 'foo'))
cmdclass["build"].run = run_build
cmdclass["build"].finalize_options = finalize_options_build
setup(
...
cmdclass=cmdclass
...
)
设置
foo
的默认值如何?是的,但我希望使用一个特定的给定值--foo进行安装