该篇文章来源于 Fabric 的官方文档,原文为Fabfile construction and usehtml
这篇文章包含了关于 fabfiles 的如下两项python
Fabric 可以加载 Python 模块(好比:fabfile.py
)或者 包(好比:一个包含__init__.py
文件的名叫fabfile
的目录)。它默认寻找命名为 fabfile
的文件或者目录,要么是 fabfile/
,要么是fabfile.py
。算法
fabfile 发现算法搜索调用用户的当前工做目录或者是任何父目录。所以,它是面向“工程”使用的,这个工程的源码树的根目录有一个 fabfile.py
文件。不管在这个树的哪里,当使用 fab
命令的调用的时候,这个 fabfile
文件将被发现。api
可使用命令行参数 -f
来重写指定名字搜索到的 fabfile
文件,或者是加一个 fabricrc 行来设置 fabfile
的值。例如,你想命名你的 fabfile
为 fab_tasks.py
,你能够建立这样一个文件,而后调用命令 fab -f fab_tasks.py <task name>
,或者是添加以下 fabfile = fab_tasks.py
到 ~/.fabricrc
文件里面。ide
若是给定的 fabfile 名字中除了文件名以外还包含路径(好比:../fabfile.py
或者是 /dir1/dir2/custom_fabfile
),它将被做为一个文件路径对待,而且没有任何排序搜索就直接验证是否存在。当在这种模式下,波浪线扩展将被应用。所以你能够参考:~/personal_fabfile.py
ui
注:为了访问你的
fabfile
文件的内容, Fabric 作了一个正常的 import (实际是一个 import) – it does not do any eval-ing or similar. 为了完成这个工做, Fabric 临时把发现的 fabfile 文件的路径添加进 Python 的加载路径中 (而且而后当即移除了它).net
注:Changed in version 0.9.2: The ability to load package fabfiles命令行
由于 Fabric 是 Python 编写的。你能够以任何的你想的方式 import 它的组件。尽管如此,为了封装以及便利(使得更加容易的包装 Fabric 的脚本),Fabric 的公共 API 是维护在 fabric.api
模块中。code
全部的 Fabric 的 Operations, Context Managers, Decorators 和 Utils 被包含在这个模块中,做为一个单独的标记命名空间。这可使你的 fabfiles 文件有一个至关简单以及方便的接口调用。htm
from fabric.api import * # call run(), sudo(), etc etc
这不是最好的技术实践(由于一些缘由),你仅仅是使用了一些 Fabric API 的调用。一个更好的方法是精确的使用 from fabric.api import env, run
或者是相似的方法。尽管如此,在大多数重要的 fabfiles ,你能够经过使用 import
星号来使用全部的或者大部分的 API。
from fabric.api import *
主要包括以下:
from fabric.api import abort, cd, env, get, hide, hosts, local, prompt, \ put, require, roles, run, runs_once, settings, show, sudo, warn
在这个示例咱们感受到实用主义重写了最佳实践。