1. ホーム
  2. python

[解決済み] Python でインタラクティブにモジュールを再インポートする

2022-03-20 10:03:41

質問

できることは分かっているのですが、方法を思い出せません。

Pythonでモジュールを再インポートするにはどうすればよいですか? シナリオは次のとおりです。モジュールをインタラクティブにインポートして、それをいじくりまわしていたら、エラーに直面した。私は.pyファイルのエラーを修正し、私はpythonを終了せずに修正されたモジュールを再インポートしたいです。どうすればいいでしょうか?

どのように解決するのですか?

について Python 3.4+ :

import importlib
importlib.reload(nameOfModule)

について Python < 3.4 :

reload(my.module)

から Pythonドキュメント

<ブロッククオート

以前にインポートしたモジュールを再ロードします。引数はモジュールオブジェクトでなければならないので、以前に正常にインポートされたものでなければなりません。これは、外部エディタを使ってモジュールのソースファイルを編集していて、Python インタープリタから離れることなく新しいバージョンを試したい場合に便利です。

この方法を使用する際の注意点を忘れてはいけません。

  • モジュールがリロードされたとき、その辞書(モジュールのグローバル変数を含む)は保持されます。名前の再定義は古い定義を上書きするので、一般的には問題ありませんが、古いバージョンで定義されていた名前を新しいバージョンのモジュールが定義しない場合、古い定義は削除されません。

  • あるモジュールが、他のモジュールから from ... import ... を呼び出すと reload() を実行しても、他のモジュールからインポートされたオブジェクトは再定義されません - これを回避する一つの方法は from ステートメントを使用する方法、もう一つは import と修飾名( module.*name* ) の代わりに

  • モジュールがクラスのインスタンスを生成する場合、そのクラスを定義しているモジュールをリロードしても、インスタンスのメソッド定義には影響がなく、古いクラス定義が使用され続けます。派生クラスについても同様です。