setup.py中的runall命令

时间:2018-06-21 22:35:03

标签: python python-3.x design-patterns setuptools

我通过扩展setuptools python库中的命令类创建了许多自定义命令。这些命令类似于Clean,RunTest(每个单独的类都有其run(self)方法)。 我现在创建了一个RunAll类,该类也可以归类为Command类,并且需要调用其他命令。让我展示一些代码,以使其更加清晰。

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的类,该类将运行所有这些命令(尝试模拟ant all命令)。这样的代码就像。

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类中获取Command参数。

基本上,我无法实例化命令。 但是当我做python setup.py clean时,它运行得很好。

setuptools是按这种方式设计的,是否需要更改设计,或者还有其他方法可以做到?

1 个答案:

答案 0 :(得分:1)

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

Clean(self.distribution).clean()
…

或者您可以使用require通过名称运行其他命令:

self.run_command('clean')
…