LoginSignup
113
80

More than 3 years have passed since last update.

ipython を起動しながら自作モジュールを修正した場合

Last updated at Posted at 2016-03-09

目的

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
  1. 外部のモジュールautoreloadをロード
  2. autoreload 2を実行
  3. some_functionをインポートする
  4. 実行(42を返す)
  5. ここで、some_function()を43を返すように修正
  6. 実行(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ライフを!

先人の投稿

113
80
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
113
80