Pythonでimportのパスを追加するスニペット

例えば、

  • modules/
    • hoge/
      • __init__.py
      • ...
  • bin/
    • run.py

のような配置にした時、run.pyからmodulesディレクトリ内のモジュールを参照するには、importのためのパスを追加するのがよさそうです。importの際にはsys.pathリストにあるパスを元に探索されるので、そこにパスを追加します。

import os
import sys

def appendImportPath(path, base=None):
    if base:
        p = os.path.abspath(
            os.path.join(
                os.path.abspath(
                    os.path.dirname(base)
                ),
                path
            )
        )
    else:
        p = path
    sys.path.append(p)

こんな感じの関数を用意しておけば、appendImportPath("../modules", __file__)といった感じで、パスを追加できます。