我在a.py中有任务A,在b.py中有B,任务B执行A,因此有一个'导入'在b.py。
当我做#fab; list'时,我得到a.A,b.B和b.a.A.如何避免fab列表中的b.a.A?感谢。
答案 0 :(得分:2)
您可以通过限制从模块导出的功能来限制在fab -l
中显示的结构。 defining tasks的结构文档中提供了对此的详细说明(特别是namespaces和Limiting 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