Python setup.py中的runall命令

Python setup.py中的runall命令,python,python-3.x,design-patterns,setuptools,Python,Python 3.x,Design Patterns,Setuptools,通过扩展setuptoolspython库中的command类,我创建了许多自定义命令。这些命令类似于Clean、RunTest(每个类都有其run(self)方法)。 我现在已经创建了一个RunAll类,如果它还对命令类进行子分类,则需要调用其他命令。让我展示一下我的一些代码,让它更清晰 class Clean(Command): description = 'Cleans the build' user_options = [] def initialize_options(self):

通过扩展
setuptools
python库中的command类,我创建了许多自定义命令。这些命令类似于Clean、RunTest(每个类都有其
run(self)
方法)。 我现在已经创建了一个RunAll类,如果它还对
命令
类进行子分类,则需要调用其他命令。让我展示一下我的一些代码,让它更清晰

class Clean(Command):

description = 'Cleans the build'
user_options = []

def initialize_options(self):
    pass

def finalize_options(self):
    pass

def clean(self):
    print("Cleaning")

def run(self):
    self.clean()
还有一些类似的类,比如Runtests等,它们的格式类似。 现在我创建了一个名为RunAll的类,它运行所有这些命令(尝试模拟
antall
command)。所以代码是这样的

class RunAll(Command):
"""
runs few specific commands mentioned
"""

description = 'Runs specific commands mentioned'
user_options = []

def initialize_options(self):
    pass

def finalize_options(self):
    pass

def run(self):
    # init,clean,version,build,test,dist
    Clean().clean()
    Version().printVersion()
    RunTests().runtests()
    Dist().dist()
现在,当我运行
python setup.py runall
时,我得到以下错误

  File "C:\Users\rsareen\AppData\Local\Programs\Python\Python36\lib\site-packages\setuptools\__init__.py", line 129, in setup
return distutils.core.setup(**attrs)
  File "C:\Users\rsareen\AppData\Local\Programs\Python\Python36\lib\distutils\core.py", line 148, in setup
dist.run_commands()
  File "C:\Users\rsareen\AppData\Local\Programs\Python\Python36\lib\distutils\dist.py", line 955, in run_commands
self.run_command(cmd)
  File "C:\Users\rsareen\AppData\Local\Programs\Python\Python36\lib\distutils\dist.py", line 974, in run_command
cmd_obj.run()
  File ".\setup.py", line 58, in run
Clean().clean()
TypeError: __init__() missing 1 required positional argument: 'dist'
无法在
命令
类中获取
dist
参数

基本上,我无法实例化这些命令。 但是当我执行
python setup.py clean
时,它运行得非常完美

setuptools是这样设计的吗?我需要更改我的设计,还是有其他方法可以做到这一点?

命令类似乎是一个参数,并将该参数存储在中。因此,将其传递给您创建的命令类:

Clean(self.distribution).clean()
…
或者,您可以使用以下命令按名称运行不同的命令:

self.run_command('clean')
…