DS JUNKSTAブログ

元文系院卒が独学で取り組むDS(データサイエンス)、その有象無象のアウトプット、DSは本当に楽しい

【Jupyter lab】%autoreload 1 と %autoreload 2 の違い

Jupyter labのnotebookでその他のモジュール(.pyファイル)をオートリロードするには、以下を実行すればいい。

%load_ext autoreload
%autoreload 2
import (モジュール名)

しかし、%autoreload 2 だけでなく、%autoreload 1 もあったりしたため、本記事ではその違いを整理する。

%autoreload 1

IPythonの公式ドキュメントには、以下のように書いている。

Reload all modules imported with %aimport every time before executing the Python code typed.
(試訳)Pythonコードを実行するごとに%aimportでインポートされた全てのモジュールをリロードする

つまり、%aimport でインポートしたモジュールが対象に、notebookの実行ごとにオートリロードされることになる。
ただしimport でインポートしたモジュールはオートリロード対象外。

%load_ext autoreload
%autoreload 1
%aimport some_function #←オートリロード対象
import some_function #←オートリロード対象外



%autoreload 2

公式ドキュメントでは以下の通り。

Reload all modules (except those excluded by %aimport) every time before executing the Python code typed.
(試訳)Pythonコードを実行するごとに全てのモジュール(%aimportで除外されたモジュールは除く)をリロードする

いろいろ試してみたところ、importだけなく%aimport でインポートしたモジュールもオートリロード対象。

%load_ext autoreload
%autoreload 2
%aimport some_function #←オートリロード対象
import some_function #←オートリロード対象

ただし、

%aimport -(モジュール名)

のようにモジュールを指定して実行した時点で、オートリロードがストップされる。

%aimport -some_function #←指定したモジュールがオートリロード対象外になる

これを実行した時点から、オートリロード対象外になる。使い道は不明。


これらの他に%autoreload 3もあるのだが、%autoreload 2 との違いがわからなかったので今回は説明を省いた。

参考

IPython公式ドキュメント
autoreload — IPython 8.3.0 documentation