【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