IPython でサブモジュールを再ロードする 質問する

IPython でサブモジュールを再ロードする 質問する

現在、サブモジュールを含み、numpy/scipy を使用する Python プロジェクトに取り組んでいます。Ipython は対話型コンソールとして使用されます。残念ながら、現在使用しているワークフローにはあまり満足していないので、アドバイスをいただければ幸いです。

IPython では、フレームワークは簡単なimportコマンドでロードされます。ただし、フレームワークのサブモジュールの 1 つでコードを変更する必要があることがよくあります。この時点ではモデルはすでにロードされており、IPython を使用してモデルと対話します。

現在、フレームワークには相互に依存する多くのモジュールが含まれています。つまり、フレームワークが最初にロードされると、メイン モジュールはサブモジュールをインポートして構成します。コードの変更は、モジュールが を使用して再ロードされた場合にのみ実行されます。変更されたすべてのモジュールをフル パスを使用して個別に再ロードする必要があるため、これは面倒です。がすべてのサブ モ​​ジュールも再ロードし、numpy/scipy を再ロードしないreload(main_mod.sub_mod)場合は非常に便利です。reload(main_module)

ベストアンサー1

IPythonにはいくつかの自動リロード魔法:

%load_ext autoreload
%autoreload 2

新しい行を実行する前に、変更されたすべてのモジュールを毎回再ロードします。 この動作は とは少し異なりますdreload。 いくつかの注意事項が適用されますので、入力して%autoreload?何が問題になるかを確認してください。


この設定を常に有効にしたい場合は、IPython設定ファイル~/.ipython/profile_default/ipython_config.py[1]を変更し、以下を追加します。

c.InteractiveShellApp.extensions = ['autoreload']     
c.InteractiveShellApp.exec_lines = ['%autoreload 2']

下のコメントを通じて @Kos に感謝いたします。

[1] ファイル がない場合は~/.ipython/profile_default/ipython_config.py、まず を呼び出す必要がありますipython profile create。または、ファイルは にある可能性があります$IPYTHONDIR

おすすめ記事