目的
ipython起動中に、自作モジュールの修正をしても反映されないので、この問題を回避する策を提示すること
メイン
本家 の翻訳のようになってしまうがお許しください。
以下の順番で進みます
%autoreload 2
%autoreload 1
%autoreload
%autoreload 2
簡単のため本家そのまま引用する
In [1]: %load_ext autoreload
In [2]: %autoreload 2
In [3]: from foo import some_function
In [4]: some_function()
Out[4]: 42
In [5]: # open foo.py in an editor and change some_function to return 43
In [6]: some_function()
Out[6]: 43
- 外部のモジュール
autoreload
をロード -
autoreload 2
を実行 -
some_function
をインポートする - 実行(42を返す)
- ここで、
some_function()
を43を返すように修正 - 実行(43を返す)
autoreload 2
は、実行する度にインポートしたモジュールをリロードする。ここではsome_function
を毎回リロードしてくれる。
%autoreload 1
In [1]: %load_ext autoreload
In [2]: %aimport foo
In [3]: %autoreload 1
In [4]: some_function()
Out[4]: 42
In [5]: # open foo.py in an editor and change some_function to return 43
In [6]: some_function()
Out[6]: 43
autoreload 1
は%aimport [module]
したモジュールを実行する度にリロードしてくれる。
%autoreload
In [2]: %load_ext autoreload
In [3]: from foo import some_function
In [4]: some_function()
Out[4]: 42
In [5]: # open foo.py in an editor and change some_function to return 43
In [6]: %autoreload
In [7]: some_function()
Out[7]: 43
In [8]:# open foo.py in an editor and change some_function to return 42
In [9]: some_function()
out[9]: 43
%autoreload
は%autoreload
が実行される度にインポートしたモジュールをリロードする。%autoreload
しなければ、リロードはされない
まとめ
コマンド | 特徴 | 用途 |
---|---|---|
autoreload 2 |
実行する度にモジュールを自動でリロードする | すべてのモジュールをいつでもリロードしたいとき |
autoreload 1 |
%aimport で指定したものを実行する度に自動インポート |
選択的にモジュールを自動リロードしたい時 |
autoreload |
このコマンドを実行するとモジュールが自動リロード | 自動リロードするタイミングを指定したい時 |
といったところでしょうか。結構ハマりました。しかもバージョンが上がって、過去のものは使えなくなったりしていました。reload
とか。。。
これでipythonのモジュール修正が反映されない問題が解決できました。更に楽しいipythonライフを!
先人の投稿