Django で新しく Web サービスを作成する場合、タグやユーザー登録といった汎用的な機能は、自分で実装しなくても PyPI や GitHub を探せば Django アプリケーションが見つかります。
ただ、そのままでは使えなくて多少の修正を加えることがあるので、 Django アプリケーションは Python の site-packages には入れたくないです。そこで、git submodule を使って管理することにしました。
プロジェクトのルートで、git submodule コマンドを使ってリポジトリを追加します。
git submodule add リポジトリURL ./submodules/アプリケーション名
例えば django-taggit なら
git submodule add https://github.com/alex/django-taggit.git ./submodule/django-taggit
って感じになります。
これだけだと、デバッグやテストをするとき submodules 下にあるアプリケーションは読み込まれません。submodules 下にあるアプリケーションにパスを通す必要があります。
settings.py に
import os PROJECT_ROOT = os.path.dirname(__file__) import sys # submodules をパスに追加 git_sub_modules = os.path.join(PROJECT_ROOT, "submodules") for dir in os.listdir(git_sub_modules): path = os.path.join(git_sub_modules, dir) if not path in sys.path: sys.path.append(path)
と書いておけば、デバッグやテストをするとき、submodules 下に置いたアプリケーションのパスがすべて登録されます。
以降、サードパーティ製アプリケーションを追加したくなったら、git submodule add で submodules ディレクトリ下にダウンロードすればいいです。