1. ホーム
  2. パイソン

[解決済み】IPythonのサブモジュールの再読み込みについて

2022-03-24 09:24:20

質問

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

IPythonでは、フレームワークのロードは、単純な import コマンドを使用します。しかし、フレームワークのサブモジュールの1つのコードを変更する必要があることがよくあります。このとき、モデルはすでにロードされており、私はIPythonを使ってそれとやりとりしています。

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

解決方法は?

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 .