2010/01/11

Pythonでモジュールをインポートする方法

モジュールというのはとりあえずここでは .py ファイルのことだとする。
要するに他の .py ファイルで指定された変数や関数を使用するにはどうすればいいのかということ。
例えば、以下のような .py ファイルがあるとする。

# file1.py
def sample(text):
print text

この file1.py で宣言された関数である sample を対話型シェルから使いたい場合、以下のように importステートメントを使用する。

>>> import file1
>>> file1.sample("hello")
hello

このとき、関数名の頭に「file1」を付けたくなければ以下のよう fromステートメントを使用すればいい。

>>> from file1 import sample
>>> sample("hello")
hello

「file1.py」から現在の名前空間に sample という変数をコピーしてくる、という動きになる。
便利ではあるが、名前空間にすでに sample という変数が存在した場合はそれを上書きしてしまうので注意が必要。

なお Python においては、変数はオブジェクト(関数もオブジェクト)へのリファレンスを格納するものなので、すでに宣言しているsampleが関数で、名前空間にコピーした sample が「変数」ならば上書きは起こらないのではないか? という疑問に対する答えは No になる。

ちなみに、インポート対象となる .py ファイルは以下の4つの場所から探される。

  1. プログラムのホームディレクトリ

  2. 環境変数「PYTHONPATH」で指定されたディレクトリ

  3. 標準ライブラリモジュールのディレクトリ

  4. 「.pth」ファイルに記載されたディレクトリ


ここで「ホームディレクトリ」とは、importステートメントを記述しているファイルが存在するディレクトリ、または対話型シェルを実行しているディレクトリのことを示す。