2014-03-12 56 views
2

我在a.py中有任务A,在b.py中是B,而任务B执行A,因此在b.py中有一个'import a'。在python模块中组织织物任务

当我做'fab --list'时,我得到a.A,b.B和b.a.A.我怎样才能避免fab列表中的b.a.A?谢谢。

回答

2

通过限制从模块导出的功能,可以限制织物将在fab -l中显示的内容。这方面的一个很好的说明了defining tasks织物的文件(特别是在namespacesLimiting with __all__的章节中给出

如果你有你的fabfile目录中是这样的:。

. 
└── fabfile 
    ├── a.py 
    ├── b.py 
    └── __init__.py 

蛮力这样做,这是通过重命名在__init__.py

import a 
import b  
A = a.A 
B = b.B 

a.py(和b.py)你挡住的所有功能与0出口

from fabric.api import * 

@task 
def A(): 
    pass 

__all__ = [] 

运行fab -l下一次,你应该得到正确的结果

$ fab -l 
Available commands: 

    A 
    B 

然而,这是值得我们思考的,这是否是你想要做的事。通常情况下,如果您有足够的功能来使织物的输出难以阅读,那么您可能需要考虑您是否合法地首先将这些功能作为任务运行。

__all__劈另一种方法是让织物呈现以不同的格式的任务是,可能是,更易读

$ fab --list-format=nested --list 

Available commands (remember to call as module.[...].task): 

    A 
    B 
    a: 
     A 
    b: 
     B