autoreload
pythonではimportした後にもう一度importしなおしても、同名の場合はキャッシュを利用するため、import先が変更されていても適用されない。
他人のライブラリであれば、それでむしろ問題がないが、自作ライブラリの場合、それを補修しながら使うのが普通なので、ありがたくない。
そこで、importを再度するためのライブラリもpythonないにも用意されているが、多少面倒くさい。
この面倒くささを省いてくれるのが autoreload
https://ipython.org/ipython-doc/3/config/extensions/autoreload.html
にあるように、autoreloadを使うと、関数を呼ぶたびにライブラリの読み込みが入るため、ライブラリのファイルを保存するだけで、勝手に反映される。設定も色々ある。
使い方
とりあえず使いたい人向け
%load_ext autoreload
%autoreload 1
%aimport 自作ライブラリ
%autoreload
%load_ext autoreload #autoreloadを読み込む
%autoreload <option>
option | 機能 |
---|---|
なし | 全てのモジュールがこの瞬間、再読み込みされる(ただし、%aimportで除かれたものを除く) |
0 | autoreloadを無効化 |
1 | %aimportで明示されたモジュールを実行前に全て再読み込みする |
2 | 全てのモジュールが実行前に、再読み込みされる(ただし、%aimportで除かれたものを除く) |
%aimport
# fooモジュールを明示的に再読み込みする(autoreloadのoption=1に影響)
%aimport foo
#fooモジュールを明示的に再読み込みさせない(autoreloadのoption=なし,1,2に影響)
%aimport -foo
注意点
クラスのコンストラクタを変更した場合はうまく変更されない模様。
そんなときは
%autoreload
すればよい