在python模块中组织Fabric任务

时间:2014-03-12 12:36:32

标签: fabric

我在a.py中有任务A,在b.py中有B,任务B执行A,因此有一个'导入'在b.py。

当我做#fab; list'时,我得到a.A,b.B和b.a.A.如何避免fab列表中的b.a.A?感谢。

1 个答案:

答案 0 :(得分: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)中,您阻止使用__all__

导出所有功能
from fabric.api import *

@task
def A():
    pass

__all__ = []

下次运行fab -l时,您应该会得到正确的结果

$ fab -l
Available commands:

    A
    B

但是,值得考虑的是这是否是您想要做的事情。通常情况下,如果您有足够的功能来阅读结构输出很困难,您可能需要考虑是否合法地将这些功能作为任务运行。

__all__ hack的替代方法是让结构以不同的格式呈现任务,这些格式可能更具可读性

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

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

    A
    B
    a:
        A
    b:
        B