fabfileの構成と使い方¶
このドキュメントはfabfileに関する雑多なセクションを含んでいます。優れたfabfileの作成方法と作成後の利用の仕方の両方も含みます。
fabfileの探索¶
FabricはPythonのモジュール(例えば fabfile.py
)やパッケージ(例えば __init__.py
を含んでいる fabfile/
ディレクトリ)を読み込むことができます。デフォルトでは、(Pythonのインポート機構にしたがって) fabfile
と名付けられた fabfile/
もしくは fabfile.py
を探します。
fabfileの探索アルゴリズムは、起動しているユーザーのカレントワーキングディレクトリやその親ディレクトリを探します。したがって、"プロジェクト" ユース周り指向で、例えばコードツリーのルートに fabfile.py
を保持しておきます。こうしたfabfileは、ユーザーが fab
を呼び出すツリー内であればどこであれ見つけられます。
探索される特定の名称は -f
オプション付きのコマンドラインや fabfile
の値をセットする fabricrc 行を追加することでオーバーライドできます。例えば、fabfileを fab_tasks.py
と名づけたい場合、そのファイル名でファイルを作成し、 fab -f fab_tasks.py <task name>
という具合に呼び出すか、~/.fabricrc
に fabfile = fab_tasks.py
を追加します。
与えられたfabfile名にファイル名ではなくパス要素が含まれる場合(例えば、../fabfile.py
や /dir1/dir2/custom_fabfile
)、それはファイルパスとして扱われ、その存在の確認がどのような種類の探索もなしに直に行われます。このモード時、チルダは展開されて適用されますので、例えば、~/personal_fabfile.py
なども参照可能です。
注釈
Fabricはそのコンテンツにアクセスするためにfabfileの通常の import
(実際は __import__
) を行います。 評価
もしくはそれに類似する動作は行いません。そのため、Fabricは一時的に見つけたfabfileを含むフォルダーをPythonの読み込みパスに追加します(そして後ですぐに取り除きます)。
バージョン 0.9.2 で変更: fabfileのパッケージを読み込む機能。
Fabricのインポート¶
FabricはただのPythonなので、そのコンポーネントを好きなようにインポート 可能 です。とは言え、カプセル化と利便性のため(そしてFabricのパッケージスクリプトの仕事をやりやすくするため)、 fabric.api
モジュール内にFabricのパブリックAPIがメンテナンスされています。
Fabricの オペレーション、 コンテキストマネージャー、 デコレーター、 ユーティリティ のすべてが、単一でフラットな名前空間としてこのモジュールに含まれています。これによりfabfile内のFabricに対するとても単純で一貫性のあるインターフェイスが可能になっています:
from fabric.api import *
# call run(), sudo(), etc etc
これは(多くの理由により)技術的なベストプラクティスではありませんし、Fab APIの呼び出しを2,3利用するだけならおそらく from fabric.api import env, run
などのように明示したほうが いい でしょう。とは言え、たいていの単純ではないfabfileではすべてもしくはほとんどの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
なので、このケースではベストプラクティスよりも実用主義の方がより優位に感じます。