Closed2

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

bilzardbilzard

実現したいこと

毎回以下の設定を記述しているのでデフォルトの設定にしたい。

%load_ext autoreload
%autoreload 2

環境情報

IPython: 8.16.1

設定方法

IPythonのスタートアップファイルを編集する。

  1. IPythonの設定ファイルを作成(存在しない場合):
    ターミナルやコマンドプロンプトで以下のコマンドを実行して、設定ファイルを生成(既に存在する場合はこの手順はスキップ)。

    ipython profile create
    
  2. スタートアップフォルダに移動:
    生成された設定ファイルのディレクトリには、startupという名前のフォルダも含まれる。このフォルダ内のスクリプトはIPythonセッションが開始されるたびに実行される。

    一般的なパスは以下のようになる:

    • macOS / Linux: ~/.ipython/profile_default/startup
    • Windows: C:\Users\<USERNAME>\.ipython\profile_default\startup
  3. スタートアップスクリプトを作成:
    上記の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
bilzardbilzard

実際にモジュール変更時に即時反映されるかチェックする

autoreloadの振る舞いを実際のimportの振る舞いを通じて確認する手順は以下のとおりである:

  1. テスト用のモジュールの作成:

    まず、ノートブックと同じディレクトリにtest_module.pyという名前のファイルを作成する。このファイルには次の内容を書き込む。

    def print_message():
        print("Initial message")
    
  2. Jupyter Notebookでのモジュールのインポート:

    Jupyter Notebookの新しいセルで以下のコードを実行し、上記で作成したモジュールをインポートする。

    from test_module import print_message
    print_message()
    

    これにより、"Initial message"という出力が得られる。

  3. モジュールの内容の変更:

    test_module.pyを編集し、print_message関数の中のメッセージを"Updated message"に変更する。

    def print_message():
        print("Updated message")
    
  4. 関数の再呼び出し:

    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の異なるモードがどのように機能するかを確認できる。

このスクラップは2023/10/18にクローズされました