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> という具合に呼び出すか、~/.fabricrcfabfile = 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

なので、このケースではベストプラクティスよりも実用主義の方がより優位に感じます。

タスクの定義とコールバックのインポート

fabfileを読み込んだ時にFabricが正確には何をタスクとみなすのかについて、そして他のコードをインポートする良い方法についての重要な情報が 実行モデル ドキュメンテーションの タスクの定義 にありますので、参考にしてください。