Help us understand the problem. What is going on with this article?

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

目的

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ライフを!

先人の投稿

http://qiita.com/ksomemo/items/74607f4dd3222fe9273d

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした