現在、サブモジュールを含み、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
。