ipython notebookでautoreloadをデフォルトで読み込む

実現したいこと
毎回以下の設定を記述しているのでデフォルトの設定にしたい。
%load_ext autoreload
%autoreload 2
環境情報
IPython: 8.16.1
設定方法
IPythonのスタートアップファイルを編集する。
-
IPythonの設定ファイルを作成(存在しない場合):
ターミナルやコマンドプロンプトで以下のコマンドを実行して、設定ファイルを生成(既に存在する場合はこの手順はスキップ)。ipython profile create
-
スタートアップフォルダに移動:
生成された設定ファイルのディレクトリには、startup
という名前のフォルダも含まれる。このフォルダ内のスクリプトはIPythonセッションが開始されるたびに実行される。一般的なパスは以下のようになる:
- macOS / Linux:
~/.ipython/profile_default/startup
- Windows:
C:\Users\<USERNAME>\.ipython\profile_default\startup
- macOS / Linux:
-
スタートアップスクリプトを作成:
上記のstartup
ディレクトリ内で、例えばautoreload_setup.py
という名前の新しいPythonファイルを作成する。そして、そのファイルに以下のコードを追加する。get_ipython().run_line_magic("load_ext", "autoreload") get_ipython().run_line_magic("autoreload", "2")
これで、次回IPythonやJupyter Notebookを起動する際に、autoreload
拡張が自動的にロードされ、%autoreload 2
が自動的に実行されるようになる。
確認方法
notebook上で以下を実行する。
assert "IPython.extensions.autoreload" in get_ipython().extension_manager.loaded

実際にモジュール変更時に即時反映されるかチェックする
autoreload
の振る舞いを実際のimport
の振る舞いを通じて確認する手順は以下のとおりである:
-
テスト用のモジュールの作成:
まず、ノートブックと同じディレクトリに
test_module.py
という名前のファイルを作成する。このファイルには次の内容を書き込む。def print_message(): print("Initial message")
-
Jupyter Notebookでのモジュールのインポート:
Jupyter Notebookの新しいセルで以下のコードを実行し、上記で作成したモジュールをインポートする。
from test_module import print_message print_message()
これにより、"Initial message"という出力が得られる。
-
モジュールの内容の変更:
test_module.py
を編集し、print_message
関数の中のメッセージを"Updated message"に変更する。def print_message(): print("Updated message")
-
関数の再呼び出し:
Jupyter Notebookの新しいセルで、再び
print_message()
関数を呼び出す。print_message()
autoreload
の振る舞いによる結果は以下のとおりである:-
autoreload
が無効(モード0)の場合: "Initial message"という出力が得られる。 -
autoreload
がモード1の場合: "Initial message"または"Updated message"という出力が得られる。モード1は、Pythonコード内で実行される前に、変更されたモジュールを再読み込みする。 -
autoreload
がモード2の場合: "Updated message"という出力が得られる。モード2は、すべてのモジュールをすべてのPythonコードの実行前に再読み込みする。
-
この手順を通じて、autoreload
の異なるモードがどのように機能するかを確認できる。