git submodule でサードパーティ製 Django アプリケーションを管理する

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 ディレクトリ下にダウンロードすればいいです。