モジュールのインポートをやり直す

まとめ

404 Not Found
Pythonのimportはシングルトンだそうです。importし直しても同じオブジェクトの名前空間を変えるだけ。モジュールをimportし直したいときは、

reload(foo)

みたいにすればok。

経緯

かんたんなスクリプトを書くのでも、対話シェルで実行しながら書いたほうがやりやすいので、モジュールみたいにして書いていましたが、メソッドを更新してモジュールのファイルを保存しても、対話シェルから実行した結果が変わりませんでした。なんとなくimportし直してみても変わらず。
foo.pyという名前で以下を作成して、

def foo():
    print 'foo called'

対話シェルから実行。

In [1]: import foo

In [2]: foo.foo()
Out[2]: foo called

foo.pyを以下に書き換えて、

def foo():
    print 'modified foo'

実行してみる。

In [3]: foo.foo()
Out[3]: foo called      # 変わらない

In [4]: import foo      # importし直してみても

In [5]: foo.foo()
Out[5]: foo called      # やっぱり変わらない

という感じだったので、ドキュメントでも読むかーと思ってググったら、ばっちりのネタを解説してる上記のページがすぐ見つかりました。感謝。

In [6]: reload(foo)    # リロード

In [7]: foo.foo()
Out[7]: modified foo      # 変わったー!

なるほどー。勉強になりました。